Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit Thread
Marekventur - Do 06.11.03 17:11
Titel: Problem mit Thread
Hi!
Ich habe einen Thread geschrieben, wenn ich in aber über execute starte dann beginnt der Thread, der Hauptprogrammablauf blaibt aber hinter execute stehen.
Delphi-Quelltext
1: 2:
| Thraed.execute; ShowMessage(''); |
D.h. erst wenn TThread.Execute komplett fertig ist wird die Message gezeigt.
Das ist doch normalerweise total falsch? :idea:
Könntet ihr mir sagen, woher das kommen könnte?
PS: Selbst Buttons reagieren erst nach ende des Thread.execute auf klicks, bzw die Ereignissroutine wird so lange verzögert..
THX
Marek
Moderiert von
Tino: BBCode aktiviert.
ShadowThief - Do 06.11.03 17:27
einen thread startest du auch nicht mit execute
sondern der thread wird entweder gleich beim erstellen gestartet:
Delphi-Quelltext
1:
| MyThread := TMyThread.Create(False); |
oder du pausierst ihn beim erstellen
Delphi-Quelltext
1:
| MyThread := TMyThread.Create(True); |
und machst dann
dann gehts.
die Execute-methode wird automatisch aufgerufen, das musst du
nicht machen.
shadow.
Marekventur - Sa 08.11.03 17:30
THX
ich war schon kurz davor das neu gelernte Wissen nie mehr zu gebrauchen.... Danke!
Jagg - Sa 06.03.04 06:03
oh genau das habe ich auch gesucht ;)
wenn ich jetzt aber den thread starte mit create(false)
wo muss ich dann meinen Thread Code hinzutun damit er abgearbeitet wird !
ich execute vllt oder direkt nach create ???
und noch eine frage wenn ich 1 thread dann habe wie lass ich mehrere threads laufen
auch mit create(false) ???
Jagg - Sa 06.03.04 06:08
so nun hier ist mein code
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure StartThread; var MyThread: TThread; begin MyThread := TThread.Create(true); MyThread.Priority := tpLower; MyThread.FreeOnTerminate := true; MyThread.Resume; end;
procedure MyThread.Execute; begin showmessage('Hallo'); end; |
...soviel ich wird bei MyThread.Resume der Thread gestartet und dann die Procedure MyThread.Execute aufgerufen oder ???
...weil er springt bei mir nicht in diese procedure rein !
Was mache ich falsch ???
(naja,das mit dem showmessage ist nicht so einfallsreich,aber ich ja nur zum testen ob es auch geht)
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt
ShadowThief - Sa 06.03.04 12:10
sorry, aber da komm ich jetzt nicht mit. das ist doch alles relativ selbsterklärend:
ihr seid in eurem projekt. dann macht ihr datei -> neu -> weitere -> thread-objekt ->
dem thread einen namen geben (TMyThread, das 'T' von 'TMyThread' ist wichtig, weil ihr erstellt grad eine thread-klasse), dann habt ihr also ne neue unit, in der eure threadklasse angelegt ist. eine 'procedure Execute' gibts auch schon, da schreibt ihr euren code rein (Achtung: 'Execute' wird nur 1x ausgeführt, ihr müsst also ne schleife programmieren, wenn ihr wollt, das irgendwas öfters ausgeführt wird. so das wars zu dieser unit. in einer anderen unit macht ihr dann folgendes
Delphi-Quelltext
1:
| MyThread := TMyThread.Create(False); |
Delphi-Quelltext
1: 2:
| MyThread := TMyThread.Create(True); MyThread.Resume; |
ähm, viel mehr gibts da nicht zu sagen ....
shadow.
Moderiert von
Tino: Überflüssige Absätze entfernt.
Christian S. - Sa 06.03.04 13:14
Sag mal Jagg, was soll das eigentlich, Deine Frage in zwei Threads zu posten? Den anderen habe ich mal geschlossen.
Udontknow - Sa 06.03.04 20:28
Ist die Deklaration der Prozedur Execute mit "override" gekennzeichnet?
Cu,
Udontknow
ShadowThief - So 07.03.04 14:03
@Udontknow:
an wen geht die frage? ja es ist eine override-procedure.
shadow.
Udontknow - So 07.03.04 14:55
Die Frage ging an Marekventur. Wenn er den Thread manuell implementiert hat und nicht über den Experten, könnte die Ursache, daß die Prozedur nicht angesprungen wird, eben genau an einer fehlenden "override"-Kennzeichnung liegen.
Cu,
Udontknow
Jagg - So 07.03.04 17:05
also ich habe kein thread objekt erstellt ich hab einfach nur eine form genommen
das müsste damit auch gehen oder ????
ich habe den code so wie oben aber es klappt nicht ich weiss nicht woran es liegt
und das mit dem ovveride habe ich auch
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ype MyThread = class(TThread) private protected procedure Execute; override; end; |
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
Jagg - So 07.03.04 17:16
so,leute ich habe das jetzt mit dem execute habe es gefunden
wie mache ich das jetzt noch das er mehrere threads paralell macht ???
muss ich die execute prozedur mehrmals aufrufen ode eine schleife machen ???
Jagg - So 07.03.04 18:20
ich hätte jetzt mal eine andere frage .
Was bedeutet das "override" eigentlich ?
und was bedeutet "Private,public and protected" ?
Christian S. - So 07.03.04 18:24
Neue Frage, neuer Thread. Schau Dir dazu mal Luckies Klassen-Tutorial an.
Jagg - So 07.03.04 19:59
danke werd mich nochmal melden
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!