![]() |
AW: Thread Synchronize Fragen
Zitat:
|
AW: Thread Synchronize Fragen
Zitat:
Delphi-Quellcode:
unit Unit17;
interface uses System.SysUtils, System.Classes, Winapi.Windows, Vcl.Controls, Vcl.Forms, Vcl.StdCtrls, Vcl.ComCtrls; type TMyThread = class(TThread) protected var progressbarHandle: THandle; protected procedure Execute(); override; public constructor Create(const progressbarHandle: THandle); end; TForm1 = class(TForm) ProgressBar1: TProgressBar; Button1: TButton; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation uses Winapi.CommCtrl; {$R *.dfm} { TMyThread } constructor TMyThread.Create(const progressbarHandle: THandle); begin inherited Create(True); self.progressbarHandle := progressbarHandle; end; procedure TMyThread.Execute(); var percentDone: Integer; begin percentDone := 0; while (not Terminated) do begin Inc(percentDone, 1); PostMessage(progressbarHandle, PBM_SETPOS, percentDone, 0); if (percentDone < 100) then TThread.Sleep(100) else Terminate(); end; end; procedure TForm1.Button1Click(Sender: TObject); var myThread: TMyThread; begin myThread := TMyThread.Create(ProgressBar1.Handle); myThread.FreeOnTerminate := True; myThread.Start(); end; end. Bonuspuntke für mehrmaliges Drücken des Buttons :wink: |
AW: Thread Synchronize Fragen
Zitat:
|
AW: Thread Synchronize Fragen
Funktioniert bei mir leider trotzdem nicht.
|
AW: Thread Synchronize Fragen
(Hier könnte ihre Werbung stehen)
|
AW: Thread Synchronize Fragen
Zitat:
So ist die grobe Richtung. Gruß K-H |
AW: Thread Synchronize Fragen
Zitat:
Pseudo!
Delphi-Quellcode:
* diese Arbeit kann etwas dauern. In dieser Prozedur1 wird auch mein Thread erst erzeugt.
- MainForm > Button1Click
-- UnitX.Prozedur1 wird aufgerufen* -- while-Schleife** -- ein paar Sachen werden noch in UnitX.Prozedur1 erledigt - wenn fertig, gehts zurück zu Button1Click (Aufrufer), ein paar Sachen werden noch erledigt und der Code ist beendet. **Nachdem der Thread erzeugt wurde warte ich mit
Delphi-Quellcode:
while ... solange der thread läuft ... do begin Application.ProcessMessages; Sleep(1000); end;
|
AW: Thread Synchronize Fragen
Wozu dann der Thread, wenn du eh Sleep im Mainthread aufrufst? Dann kannste auch alles gleich darin (im Button1Click) ausführen.
|
AW: Thread Synchronize Fragen
Zitat:
Gruß K-H |
AW: Thread Synchronize Fragen
Das ist sehr alter Code.
Ohne die Threads (es gibt mehrere Worker-Threads) würde das gar nicht so funktionieren wie ich es möchte und wie es aktuell auch ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz