Autor Beitrag
mazias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mo 23.12.02 01:03 
In meinem Programm werden viele zeitintensive Prozesse abgearbeitet und dabei kann der Benutzer das Programm nicht benutzen weil es stark ruckelt.

Also hab ich die Prozesse in einen Thread ausgelagert und dessen Priorität auf Idle gesetzt. Das bringt aber rein gar nichts.

Zum Test hab ich mal folgenden Code in die Execute Methode reingepackt:
ausblenden Quelltext
1:
2:
3:
    repeat

    until terminated;

Das lastet den Computer natürlich zu 100% aus. Obwohl ich die Priorität auf Idle eingestellt hab, freezt mein ganzes Programm während ich Windows noch gut benutzen kann.

Wie krieg ich den Thread nun so hin, das mein Prog nicht ruckelt/freezt?

vielen Danke schom mal für alle Ideen

-Matze
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 23.12.02 10:24 
Hi!

Ein Fehler, der sehr häufig gemacht wird, ist das Ausführen des Threads. Wenn du einfach nur MeinThread.Execute aufrufst, wirst du nicht deinen Thread starten. Anstelle dessen führt der VCL-Hauptthread, der auch dein Programm verwaltet, eben die Prozedur aus.
Bei einem Thread also immer Resume aufrufen, oder ihn gleich nach Erstellung starten lassen (CreateSuspended=False).

Am besten zeigst du mal ein bisschen Code, wo du den Thread startest.

Cu, :)
Udonktnow
mazias Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 27.12.02 14:08 
Vielen Dank, genau das war mein Fehler.
Threads sind echt was feines, man muss aber höllisch aufpassen das man keine simultanen Zugriffe macht. Was passiert eigentlich wenn die Execute Methode verlassen wird? Ist der Thread dann suspended, oder ganz aus?

Tschau
-Matze
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 27.12.02 14:23 
Sobald der Thread die Execute-Routine abgeschlossen hat, ist er terminated. Ich bin mir jetzt nicht sicher, ob ein erneuter Resume-Aufruf dann erneut den Thread von Anfang an startet, es dürfte aber so sein (andernfalls müsste man ja immer das TThread-Objekt verwerfen und neu erstellen, um erneut zu starten).

Cu,
Udontknow