| Autor |
Beitrag |
Marekventur
      
Beiträge: 72
|
Verfasst: Do 06.11.03 17:11
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?
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
      
Beiträge: 278
|
Verfasst: 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
Delphi-Quelltext
dann gehts.
die Execute-methode wird automatisch aufgerufen, das musst du
nicht machen.
shadow.
_________________ "soylent grün ist menschenfleisch!"
|
|
Marekventur 
      
Beiträge: 72
|
Verfasst: Sa 08.11.03 17:30
THX
ich war schon kurz davor das neu gelernte Wissen nie mehr zu gebrauchen.... Danke!
|
|
Jagg
      
Beiträge: 635
|
Verfasst: 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
      
Beiträge: 635
|
Verfasst: 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
      
Beiträge: 278
|
Verfasst: 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.
_________________ "soylent grün ist menschenfleisch!"
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Sa 06.03.04 20:28
Ist die Deklaration der Prozedur Execute mit "override" gekennzeichnet?
Cu,
Udontknow
|
|
ShadowThief
      
Beiträge: 278
|
Verfasst: So 07.03.04 14:03
@Udontknow:
an wen geht die frage? ja es ist eine override-procedure.
shadow.
_________________ "soylent grün ist menschenfleisch!"
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: 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
      
Beiträge: 635
|
Verfasst: 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
      
Beiträge: 635
|
Verfasst: 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 ???
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 07.03.04 17:20
Hallo!
Hast Du Dir dieses Tutorial mal durchgelesen?
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Jagg
      
Beiträge: 635
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 07.03.04 18:24
Neue Frage, neuer Thread. Schau Dir dazu mal Luckies Klassen-Tutorial an.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Jagg
      
Beiträge: 635
|
Verfasst: So 07.03.04 19:59
danke werd mich nochmal melden
|
|