![]() |
Multithreading und TForm.Create(self) - geht das?
Moin
Ich finde keine Informationen darüber ob und falls ja, wie ich in einem Thread eine Form self-createn kann. Geht das überhaupt?
Delphi-Quellcode:
Der Debugger meckert -> Die 'Execute' meckert jetzt, daß die Komponenten inkompatible sind.
procedure TKeyinside.Execute;
begin if DarfLaufen <> 'Nein' then begin if not Assigned(Form_Check) then begin Form_Check := TForm_Check.Create(self); Form_Check.INI_Auslesen; if Form_Check.Checkit = falsethen Form_Check.ShowModal; Form_Check.Destroy; Form_Check := nil; DarfLaufen := ''; end; end; end; procedure TMainForm.Timer3Timer(Sender: TObject); begin // Der Timer sollte ursprünglich nur zum lostreten eines Threads dienen // Testweise so eingebunden Keyinside := TKeyinside.Create(true); // Thread inaktiv erzeugen Keyinside.FreeOnTerminate := true; // Thread nach dem Beenden freigeben Keyinside.Resume; // Thread aktivieren end; Kann man in Threads Form.create(self) anwenden? - Wenn ja - wie gehts richtig? Danke |
Re: Multithreading und TForm.Create(self) - geht das?
Die VCL ist nicht threadfest, folglich lassen sich Forms nur im Hauptthread anlegen und funktionieren auch nur dort.
|
Re: Multithreading und TForm.Create(self) - geht das?
Alos bei mir hat es mit folgendem code funktioniert...
Delphi-Quellcode:
probiers halt mal so aus Synchrnize muss halt sein...
procedure TTestThread.Execute;
begin Synchronize(Showform); end; procedure TTestThread.Showform; begin form3:= TForm3.Create(Form1); Form3.Show; end; |
Danke - klappt
Yep - und wie das läuft...
Danke |
Re: Multithreading und TForm.Create(self) - geht das?
Und der Grund dafür ist, dass nur in der Application-Hauptschleife Windows - messages empfangen werden können und nur dort ... in keinem anderen Thread.
Und die Synchronize() - Methode versetzt die aufzurufende procedure in den Hauptschleifen - context! |
Re: Multithreading und TForm.Create(self) - geht das?
Fragt sich nur wie lange. Messages kann man auch in einem Thread empfangen, aber die VCL ist sicher nicht auf solche Scherze eingerichtet. Bitte sein lassen.
|
Re: Multithreading und TForm.Create(self) - geht das?
Zitat:
|
Re: Multithreading und TForm.Create(self) - geht das?
Es wird aber nur das Show synchronisiert.
|
Re: Multithreading und TForm.Create(self) - geht das?
OK, .... also erstens: Auch wenn mit Show() aufgerufen wird, werden alle folgenden Window-Messages, von denen das Window lebt auch im Hauptthread gesendet und verarbeitet (Das OS weiß ja gar nichts davon, in welchem Thread die Sychronisierung stattgefunden hat!!!)
Und Zweitens: Ruft man ein Fenster in diesem Zusammenhang sowieso zu 95% modal auf, da man im Thread ja das (Eingabe-)Ergebnis der Form benötigt, um fortzufahren (wie gesagt: meistens). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 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