![]() |
Thread startet aber macht nicht fertig
Hallo,
ich mal wieder :P Und zwar wenn ich mehrere Threads starte zbs. 5.
Delphi-Quellcode:
und in dem Threads zbs. das drin steht:
for I := 1 to 5 do
BeginThread(nil, 0, Addr(Execute), nil, 0, id1);
Delphi-Quellcode:
Dann stehen 5 "#" in dem Memo drin, so wie es sein soll.
procedure Execute;
begin Form1.Memo1.lines.add('start '); Form1.Memo1.lines.add('#'); end; Mach ich aber so:
Delphi-Quellcode:
kommen manchmal nur 1 "#" in dem Memo oder manchmal auch 2.
procedure Execute;
begin Form1.Memo1.lines.add('start '); sleep(100); // Oder irgendwas anderes wo ein bisschen Zeit beansprucht Form1.Memo1.lines.add('#'); end; Also beendet der Thread nicht richtig? Kann mir bitte jemand einen kleine Denkanstoß geben, oder den Grund dafür nennen ? Danke schonmal für's lesen :) Gruss, MArc |
Re: Thread startet aber macht nicht fertig
Das liegt wohl daran das du unsyncronisiert aus dem Thread auf VCL-Elemente zugreifst.
|
Re: Thread startet aber macht nicht fertig
Du solltest nicht VCL Komponenten aus einem Thread ohne Synchronize verwenden.
Edit: Ups da war einer schneller :zwinker: Guck mal in der OH in TThread und Synchronize |
Re: Thread startet aber macht nicht fertig
Könnt Ihr mich auch erklären wie ich das mache ?
Wenn ich
Delphi-Quellcode:
Mache kommt ne Meldung:
procedure Execute;
begin Synchronize([b]I[/b]MachMal); sleep(100); // Oder irgendwas anderes wo ein bisschen Zeit beansprucht Synchronize(MachMal); end; Missing operator or semicolon da wo das dicke I ist. Ich habe schon in der Hilfe nachgeschaut und google auch schon seit 3 Stunden befragt, aber es kommt einfach nichts gescheites raus. Wenn ich es mittels TThread mache kommt genau das gleiche. Deswegen dachte ich, ich nehm wieder BeginThread :P. Aber das geht ja auch nicht... Danke. Gruss, MArc |
Re: Thread startet aber macht nicht fertig
Versuche einen TThread abzuleiten...
Delphi-Quellcode:
procedure TMyThread.Machmal;
begin Form1.Memo1.lines.add('...'); end; procedure TMyThread.Execute; begin Synchronize(MachMal); end; |
Re: Thread startet aber macht nicht fertig
Boah, manchmal könnte ich den hier :wall:
Bin ziemlich Felsenfest überzeugt, dass ich das gleich vorhin gemacht habe, und es nicht ging. Aber hauptsache ist, dass es jetzt funktionukt :) Danke euch. Gruss, MArc PS: Fragt mich nicht, was ich anderst gemacht habe.... weiss es nämlich selbst nicht ^^ |
Re: Thread startet aber macht nicht fertig
Laß mal lieber, :wall: davon bekommt man nur Kopfschmerzen :zwinker:
Hauptsache jetzt läufts! |
Re: Thread startet aber macht nicht fertig
Hallo, Hab da auch so ein änliches Problem. Mein Thread startet Problemlos und läuft bis kurz vor Synchronize. Dann tut sich nichts mehr (in dem thread).
Aufruf des Synchronize: (innerhalb einer Methode die in Execute aufgerufen wird.
Delphi-Quellcode:
//...
if search.Items.Count > 0 then begin fNodeToCheck:=node; // bis hier komme ich ohne Probleme Synchronize(markNode); end; //...
Delphi-Quellcode:
Die Procedure Test sollte in dem anderen Thread nun ein showmessage aufrufen, tut aber nicht. :-(
procedure TCheckForNewInPostkorbThread.MarkNode;
begin AdvNavForm.Test; end; |
Re: Thread startet aber macht nicht fertig
Zeig uns auch bitte noch die Procedure "Test". :)
|
Re: Thread startet aber macht nicht fertig
Zitat:
Meinst Du den VCL Thread oder hast Du noch meherere Threads? Zeig mal mehr Quelltext. :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz