Delphi-PRAXiS

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?

PeterPanino 26. Aug 2007 13:37

Re: ThreadedForm?
 
Zitat:

Zitat von alzaimar
Hmm.. Wie greifen die denn darauf zu?

Auf dem Hauptformular findet eine Visualisierung der Ergebnisse der ActiveX-Komponenten statt.

Reinhard Kern 26. Aug 2007 18:02

Re: ThreadedForm?
 
Zitat:

Zitat von PeterPanino
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?

Hallo,

brutal, sollte aber immer möglich sein: du startest als 2. Fenster eine eigenes Programm (und beschäftigst dich mit Inter-Prozess-Kommunikation). Wenn man das geschickt macht, fällt es garnicht auf, und wenn man weiss wie, können Programme auch sehr eng zusammenarbeiten.

Empfehlenswert: 1 x EXe für Data Processing, 1 x Exe für GUI.

Gruss Reinhard

mschaefer 26. Aug 2007 18:20

Re: ThreadedForm?
 
Wenn ich ein MDI-Fenster habe und zwei Client-Fenster, dann könnte ich den Arbeitsthread in einem Clientfenster alufen lassen und die Eingabesteuerung im zweiten. Ich bin mir da allerdinga nicht sicher, aber ich meine, dass die Zeiten zwischen den Clientfenstern aufgeteilt wird.

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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