Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ThreadedForm? (https://www.delphipraxis.net/98348-threadedform.html)

PeterPanino 25. Aug 2007 20:31


ThreadedForm?
 
Wie kann man erreichen, dass ein Nebenfenster (eines Hauptformulars) automatisch in einem eigenen Thread läuft? Gibt es für sowas eine Komponente, die man einfach auf dem Formular des Nebenfensters platziert?

Bernhard Geyer 25. Aug 2007 20:38

Re: ThreadedForm?
 
Gar nicht. Die VCL (und die Win32-API) ist nicht Thread-Save.

PeterPanino 25. Aug 2007 22:09

Re: ThreadedForm?
 
Zitat:

Zitat von Bernhard Geyer
Gar nicht. Die VCL (und die Win32-API) ist nicht Thread-Save.

Ist die .Net-VCL thread-sicher?

mr2 25. Aug 2007 22:16

Re: ThreadedForm?
 
meines Wissens nach nicht, da die VCL.net "nur" die auf .net portierte VCL ist und nach wie vor mehr als 95% der Aufrufe direkt an die Windows-API gehen

mr2

PeterPanino 25. Aug 2007 22:19

Re: ThreadedForm?
 
Das Problem ist nämlich folgendes:

Im Hauptfenster laufen ziemlich aufwendige Prozesse ab, und wenn ich dann im Nebenfenster auf einen Button klicke, dann reagiert der nicht. Und ich kann bei den aufwendigen Prozessen im Hauptfenster nicht Application.ProcessMessages aufrufen, weil diese aufwendigen Prozesse von ActiveX-Komponenten verursacht werden, auf die ich keinen Einfluss habe.

Oder wie könnte man das Problem des Button-Klicks im Nebenfenster sonst lösen?

BUG 25. Aug 2007 22:31

Re: ThreadedForm?
 
Zitat:

Zitat von PeterPanino
Das Problem ist nämlich folgendes:
Im Hauptfenster laufen ziemlich aufwendige Prozesse ab

:!:
Das wäre doch ein Ansatzpunkt: vielleicht kannst du diese Prozesse in einen Thread packen und das Hauptfenster für die Zeit sperren.

MfG,
Bug

PeterPanino 25. Aug 2007 23:15

Re: ThreadedForm?
 
Zitat:

Zitat von BUG
Das wäre doch ein Ansatzpunkt: vielleicht kannst du diese Prozesse in einen Thread packen und das Hauptfenster für die Zeit sperren.

Diese ActiveX laufen schon in einem ThreadedTimer-Event (also in einem eigenen Thread). Sie greifen aber auf das Hauptformular zu (ist notwendig) und legen deshalb den Application-Thread lahm.

PeterPanino 25. Aug 2007 23:37

Re: ThreadedForm?
 
Gibt es so etwas wie einen systemweiten Mausklick-Event? Ich könnte dann prüfen, ob der Mausklick über dem Button des besagten Nebenfensters erfolgte und in diesem Fall die gewünschte Aktion auslösen.

PeterPanino 26. Aug 2007 00:25

Re: ThreadedForm?
 
Ich habe jetzt versucht, im Timer-Event eines weiteren Thread-Timers (500 ms) mit GetAsyncKeyState abzufragen, ob eine bestimmte Taste gedrückt ist. Aber offensichtlich ist GetAsyncKeyState auch auf die Windows-Botschaftswarteschlange angewiesen, sodass auch hier erst nach einer längeren Zeit auf den Tastendruck reagiert wird.

Gibt es nicht eine LowLevel-Funktion, mit der man außerhalb der Windows-Botschaftswarteschlange abfragen kann, ob eine bestimmte Taste gedrückt ist?

alzaimar 26. Aug 2007 08:03

Re: ThreadedForm?
 
Zitat:

Zitat von PeterPanino
Zitat:

Zitat von BUG
Das wäre doch ein Ansatzpunkt: vielleicht kannst du diese Prozesse in einen Thread packen und das Hauptfenster für die Zeit sperren.

Diese ActiveX laufen schon in einem ThreadedTimer-Event (also in einem eigenen Thread). Sie greifen aber auf das Hauptformular zu (ist notwendig) und legen deshalb den Application-Thread lahm.

Hmm.. Wie greifen die denn darauf zu?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.
Seite 1 von 2  1 2      

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