AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mal wieder Threads

Ein Thema von DelTurbo · begonnen am 5. Nov 2011 · letzter Beitrag vom 6. Nov 2011
Antwort Antwort
Seite 1 von 3  1 23      
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#1

Mal wieder Threads

  Alt 5. Nov 2011, 10:01
Hi,
ich habe nur eine kurze frage. Ich erstelle mit TJvMTThread einen Thread, der über Postmessage mit dem programm redet, um ausgaben zu machen. Leider musste ich feststellen das das öfters mal in die hose geht. Leider weiss ich nicht warum. Ich bekomme nie 2x die gleiche fehler meldung. Aber es sind immer ungültige Pointer. z.b. mal in StrLen oder Minimizename usw.

Ist es besser wenn man Threads wie folgt macht? Weil von da kenne ich das mit dem Postmessage. Oder ist das mit dem Post falsch bei TJvMTThread?

Danke im voraus

Delphi-Quellcode:
const
  THREAD_TERMINATE = $0001;
  THREAD_SUSPEND_RESUME = $0002;
  THREAD_GET_CONTEXT = $0008;
  THREAD_SET_CONTEXT = $0010;
  THREAD_SET_INFORMATION = $0020;
  THREAD_QUERY_INFORMATION = $0040;
  THREAD_SET_THREAD_TOKEN = $0080;
  THREAD_IMPERSONATE = $0100;
  THREAD_DIRECT_IMPERSONATION = $0200;
  THREAD_SET_LIMITED_INFORMATION = $0400;
  THREAD_QUERY_LIMITED_INFORMATION = $0800;
  THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $03FF;

function OpenThread(dwDesiredAccess: DWord;
                    bInheritHandle: Bool;
                    dwThreadId: DWord): DWord; stdcall; external 'kernel32.dll';

{##############################################################################}

procedure StartNewThread;
begin
    ThreadHandle:=BeginThread(nil, 0, @MyThread,@MyID, 0, ThreadID);
    if ThreadHandle<>0 then CloseHandle(ThreadHandle);
end; {StartNewThread}
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Mal wieder Threads

  Alt 5. Nov 2011, 10:24
Ich weiß nicht was die JEDI-Variante anders macht als ein normaler TThread (den ich immer benutze), aber dort ist das mit PostMessage usw. kein Problem.

Die Fehlerbeschreibung hört sich eher danach an als ob du FreeOnTerminate und Resume benutzt und das ist böse, insbesondere in der Kombination...
Denn die Fehlermeldung bedeutet meistens, dass ein Objekt beim Zugriff darauf schon freigegeben war, oft wird da gerade versucht das Objekt erneut freizugeben.

Wie sieht dein Thread denn aus? Und wie benutzt du ihn?

Und FastMM kann dir auch genauer sagen, ob meine Vermutung bezüglich der Freigabe schon freigegebener Objekte stimmt (wobei es für multi-threaded Anwendungen nicht immer gut funktioniert).
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Mal wieder Threads

  Alt 5. Nov 2011, 10:39
Öhm, der Thread macht eigentlich nicht viel. Er schreibt daten in eine MySql. Nun fällt mir grade ein, das ich in dem Thread auch Threads erstelle und benutze. Die machen aber keine ausgbabe, sondern erzeugen bis zu 5 Querys auf die MySql. Diese bis zu 5 Threads werden ohne Jvcl gemacht. So wie oben geschrieben.

In der schleife (dem eigentlichen Thread) wird immer alle 100ms ausgegeben welches file er grade bearbeitet, wieviel es ingestamt sind und noch 2-3 ausgaben. Das mache ich nichtmehr in dem Thread mit z.b.

Form1.Label1.Caption:='doedel';

Sondern dafür habe ich eine extra routine die mit Postmessage aufgerufen wird.

Lasse ich nun die diese ausgaben weg, scheppert es nichtmehr. Das blöde ist, das passiert immer erst nach ein paar minuten, womit das testen zur qual wird.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Mal wieder Threads

  Alt 5. Nov 2011, 11:37
Du darfst auf VCL Elemente des Hauptthreads nur über Synchronize zugreifen, nie direkt, weil die VCL nicht threadsafe ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#5

AW: Mal wieder Threads

  Alt 5. Nov 2011, 11:49
Mache ich doch nicht. Oder ist das Postmessage auch falsch? Wenn ja, eine zeile Source wäre nett.

Nochwas anderes, der unterschied zw. PostMessage und SendMessage ist doch nur, das SendMessage wartet bis die aufgerufene sub fertig ist, wobei Post das einfach "einreiht" und sofort wieder da ist. Ist das richtig?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Mal wieder Threads

  Alt 5. Nov 2011, 12:14
Und was ist das:
Zitat:
In der schleife (dem eigentlichen Thread) wird immer alle 100ms ausgegeben welches file er grade bearbeitet, wieviel es ingestamt sind und noch 2-3 ausgaben. Das mache ich nichtmehr in dem Thread mit z.b.

Form1.Label1.Caption:='doedel';
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#7

AW: Mal wieder Threads

  Alt 5. Nov 2011, 12:19
In der schleife (dem eigentlichen Thread) wird immer alle 100ms ausgegeben welches file er grade bearbeitet, wieviel es ingestamt sind und noch 2-3 ausgaben. Das mache ich nichtmehr in dem Thread mit z.b.

Form1.Label1.Caption:='doedel';

Sondern dafür habe ich eine extra routine die mit Postmessage aufgerufen wird.
Bitte lies dochmal richtig. Ich habe nun die sachen fett gemacht.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Mal wieder Threads

  Alt 5. Nov 2011, 12:21
Wie läuft genau der DB-Zugriff. hast du für jede Thread auch eine eigene Connection? Ist die verwendete Zugriffskomponenten überhaupt Thread-Sicher?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Mal wieder Threads

  Alt 5. Nov 2011, 12:24
Versuch es mal mit SendMessage. Aber wenn du die Threadklasse benutzt würde ich es sicherheitshalber mit Synchronize machen. Und bitte wirf mir nicht vor, dass ich besser lesen solle, wenn du schon so sparsam mit Quellcode bist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#10

AW: Mal wieder Threads

  Alt 5. Nov 2011, 12:33
Und bitte wirf mir nicht vor, dass ich besser lesen solle, wenn du schon so sparsam mit Quellcode bist.
Das war doch kein vorwurf. Man(n) kann dochmal was überlesen. Das ist mir nun schon öfters hier passiert. "Ihr" lest sachen aus sätzen, die da garnicht stehen. Stimmt der Focus vom Röhrenmonitor nicht? Oder seit ihr wirklich sooo dünnhäutig??? Sorry aber das verstehe ich wirklich nicht. Da einen vorwurf rauszulesen.

Ich greife keinen an, beschimpfe keinen, und muss mich auchnoch für sachen rechtfertigen die ich garnicht gemacht habe. Irgendwie bleibt mir da die luft weg.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz