Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Thread startet aber macht nicht fertig (https://www.delphipraxis.net/77858-thread-startet-aber-macht-nicht-fertig.html)

rtky_trunks 25. Sep 2006 22:03


Thread startet aber macht nicht fertig
 
Hallo,

ich mal wieder :P
Und zwar wenn ich mehrere Threads starte zbs. 5.
Delphi-Quellcode:
 for I := 1 to 5  do
   BeginThread(nil,
                         0,
                         Addr(Execute),
                         nil,
                         0,
                         id1);
und in dem Threads zbs. das drin steht:
Delphi-Quellcode:
procedure Execute;
begin
  Form1.Memo1.lines.add('start ');
  Form1.Memo1.lines.add('#');
end;
Dann stehen 5 "#" in dem Memo drin, so wie es sein soll.

Mach ich aber so:
Delphi-Quellcode:
procedure Execute;
begin
  Form1.Memo1.lines.add('start ');
sleep(100); // Oder irgendwas anderes wo ein bisschen Zeit beansprucht
  Form1.Memo1.lines.add('#');
end;
kommen manchmal nur 1 "#" in dem Memo oder manchmal auch 2.
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

SirThornberry 25. Sep 2006 22:22

Re: Thread startet aber macht nicht fertig
 
Das liegt wohl daran das du unsyncronisiert aus dem Thread auf VCL-Elemente zugreifst.

Sunlight7 25. Sep 2006 22:23

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

rtky_trunks 25. Sep 2006 22:28

Re: Thread startet aber macht nicht fertig
 
Könnt Ihr mich auch erklären wie ich das mache ?

Wenn ich
Delphi-Quellcode:
procedure Execute;
begin
   Synchronize([b]I[/b]MachMal);
sleep(100); // Oder irgendwas anderes wo ein bisschen Zeit beansprucht
   Synchronize(MachMal);
end;
Mache kommt ne Meldung:
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

Sunlight7 25. Sep 2006 22:32

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;

rtky_trunks 25. Sep 2006 22:58

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 ^^

Sunlight7 25. Sep 2006 23:17

Re: Thread startet aber macht nicht fertig
 
Laß mal lieber, :wall: davon bekommt man nur Kopfschmerzen :zwinker:

Hauptsache jetzt läufts!

kaiser1401 12. Okt 2006 09:20

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:
procedure TCheckForNewInPostkorbThread.MarkNode;
begin
  AdvNavForm.Test;
end;
Die Procedure Test sollte in dem anderen Thread nun ein showmessage aufrufen, tut aber nicht. :-(

ste_ett 12. Okt 2006 09:26

Re: Thread startet aber macht nicht fertig
 
Zeig uns auch bitte noch die Procedure "Test". :)

Sunlight7 12. Okt 2006 09:39

Re: Thread startet aber macht nicht fertig
 
Zitat:

Zitat von kaiser1401
Die Procedure Test sollte in dem anderen Thread nun ein showmessage aufrufen, tut aber nicht. :-(

Welcher anderer Thread? :gruebel:
Meinst Du den VCL Thread oder hast Du noch meherere Threads?
Zeig mal mehr Quelltext. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.
Seite 1 von 3  1 23      

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