AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Multithreading und TForm.Create(self) - geht das?
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreading und TForm.Create(self) - geht das?

Ein Thema von jaikai · begonnen am 28. Dez 2006 · letzter Beitrag vom 29. Dez 2006
Antwort Antwort
jaikai

Registriert seit: 1. Jun 2005
70 Beiträge
 
#1

Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 11:24
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:
procedure TKeyinside.Execute;
begin
  if DarfLaufen <> 'Neinthen 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;
Der Debugger meckert -> Die 'Execute' meckert jetzt, daß die Komponenten inkompatible sind.

Kann man in Threads Form.create(self) anwenden? - Wenn ja - wie gehts richtig?

Danke
Wenn die Programme das machen, wie's wir machen, wären sie unbrauchbar...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 11:33
Die VCL ist nicht threadfest, folglich lassen sich Forms nur im Hauptthread anlegen und funktionieren auch nur dort.
  Mit Zitat antworten Zitat
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 11:38
Alos bei mir hat es mit folgendem code funktioniert...

Delphi-Quellcode:
procedure TTestThread.Execute;
begin
Synchronize(Showform);
end;

procedure TTestThread.Showform;
begin
form3:= TForm3.Create(Form1);
Form3.Show;
end;
probiers halt mal so aus Synchrnize muss halt sein...
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
jaikai

Registriert seit: 1. Jun 2005
70 Beiträge
 
#4

Danke - klappt

  Alt 28. Dez 2006, 11:52
Yep - und wie das läuft...


Danke
Wenn die Programme das machen, wie's wir machen, wären sie unbrauchbar...
  Mit Zitat antworten Zitat
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 13:08
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!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 13:27
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.
  Mit Zitat antworten Zitat
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 15:37
Zitat von Robert Marquardt:
Bitte sein lassen.
Also das verstehe ich jetzt überhaupt nicht! Wenn ein TForm erst einmal im Hauptthread einer Application läuft, verhaltet sie sich wie jede andere form auch, daher können keine Fehler (Exceptions) passieren noch gibt es Performanceprobleme.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 28. Dez 2006, 17:32
Es wird aber nur das Show synchronisiert.
  Mit Zitat antworten Zitat
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Multithreading und TForm.Create(self) - geht das?

  Alt 29. Dez 2006, 11:46
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).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz