Autor Beitrag
Marekventur
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 72



BeitragVerfasst: 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.
ausblenden 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 user profile iconTino: BBCode aktiviert.
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Do 06.11.03 17:27 
einen thread startest du auch nicht mit execute
sondern der thread wird entweder gleich beim erstellen gestartet:

ausblenden Delphi-Quelltext
1:
MyThread := TMyThread.Create(False);					


oder du pausierst ihn beim erstellen

ausblenden Delphi-Quelltext
1:
MyThread := TMyThread.Create(True);					


und machst dann

ausblenden Delphi-Quelltext
1:
MyThread.Resume;					


dann gehts.

die Execute-methode wird automatisch aufgerufen, das musst du
nicht machen.

shadow.

_________________
"soylent grün ist menschenfleisch!"
Marekventur Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 72



BeitragVerfasst: Sa 08.11.03 17:30 
THX

ich war schon kurz davor das neu gelernte Wissen nie mehr zu gebrauchen.... Danke!
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Sa 06.03.04 06:08 
so nun hier ist mein code

ausblenden 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); {true bewirkt, dass der Thread initalisiert, aber noch nicht gestartet wird} 
   MyThread.Priority := tpLower; 
   MyThread.FreeOnTerminate := true;  //so wird der Thread auch nach dem beenden automatisch aus dem Speicher entfernt 

   MyThread.Resume;  //der Thread wird gestartet 
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 user profile iconPeter Lustig: Delphi-Tags hinzugefügt
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
MyThread := TMyThread.Create(False); // Execute wirde sofort abgearbeitet					


ausblenden Delphi-Quelltext
1:
2:
MyThread := TMyThread.Create(True); // Objekt wird erstellt aber Execute wartet noch
MyThread.Resume; // aber jetzt !


ähm, viel mehr gibts da nicht zu sagen ....

shadow.

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.

_________________
"soylent grün ist menschenfleisch!"
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Sa 06.03.04 20:28 
Ist die Deklaration der Prozedur Execute mit "override" gekennzeichnet?

Cu,
Udontknow
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
ype
  MyThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
  end;


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: So 07.03.04 19:59 
danke werd mich nochmal melden