Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - ShowModal und Thread
Fienix - Do 19.03.09 18:21
Titel: ShowModal und Thread
Ich habe einen Thread der im Hintergrund Ausdrucke aufbereitet.
Z.B. ich will 5 Dokumente drucken dann werden 5 Threads gestartet,
soweit funktioniert das alles ohne Probleme.
Es sei ich rufe ShowModal auf, dann bleiben meine Threads stehen.
Weiss jemand wie man das umgehen kann das die Threads trotzdem weiterlaufen?
Danke.
Yogu - Do 19.03.09 18:29
Rufe nicht
ShowModal auf, sondern
Show ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TMyModalForm.MyShowModal; begin Application.MainForm.Enabled := False;
Show;
while Visible do Application.ProcessMessages;
Application.MainForm.Enabled := True; end; |
Fienix - Do 19.03.09 18:34
:o
Das wäre auch eine Möglichkeit.
Wenn keine besseren Vorschläge kommen, werd ich es wohl so machen müssen.
delfiphan - Do 19.03.09 20:02
Wo rufst du ShowModal auf? In den Threads bist du eingeschränkt, was du mit der VCL machen darfst.
Sinspin - Do 19.03.09 20:40
Fienix hat folgendes geschrieben : |
| Es sei ich rufe ShowModal auf, dann bleiben meine Threads stehen. |
Hä? Das verstehe ich nicht. Ein echter Thread lässt sich nicht wirklich durch etwas stoppen, mal abgesehen davon in via Suspend zu unterbrechen.
Es sei denn du versuchst aus dem Thread heraus ein Formular via ShowModal zu öffnen. Da hält er natürlich an.
Fienix - Fr 20.03.09 10:24
In den Threads ruf ich das ShowModal nicht auf sondern im Hauptprozess.
Kann es evtl an dem Synchronize liegen?
Delete - Fr 20.03.09 10:31
Fienix hat folgendes geschrieben : |
| Kann es evtl an dem Synchronize liegen? |
Ohne Code schlecht zu sagen. Jedenfalls wird jede in Synchronize aufgerufene Prozedur im Kontex des Hauptthreads ausgeführt und so lange wartet natürlcih der aufrufende Thread.
Fienix - Fr 20.03.09 10:37
Genau sowas hab ich mir schon gedacht.
Hab lieder noch nicht genau rausgefunden was Synchronize macht.
Aber ohne läuft es nicht.
Delete - Fr 20.03.09 12:35
Fienix hat folgendes geschrieben : |
| Hab lieder noch nicht genau rausgefunden was Synchronize macht. |
Dazu ist die Hilfe da. ;)
delfiphan - Fr 20.03.09 14:14
Synchronize blockiert eben gerade den Thread, bis der Aufruf beendet ist. Du kannst entweder mit Queues arbeiten, oder die MessageBox Funktion der WinAPI im Thread aufrufen (ohne Synchronize). Den Code von Yogu würde ich nicht empfehlen (es sei denn, du hast vor, ein Spiegelei auf dem Prozessor zu braten (nicht böse gemeint)).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!