While Schleife blockiert Anwendung
-
Hallo,
ich habe folgendes Problem.
Ich muss in einer Funktion eine externe Funktion einer Dll pollen.Im Prinzip habe ich einen Button, der den Pollvorgang startet und ein Flag setzt:
void CMyDialog::OnStart() { bStarted = true; while(bStarted) { //hier wird die Dll-Funktion aufgerufen } }Nun soll über einen zweiten Button das Flag umgesetzt werden, so daß der Pollvorgang abgebrochen wird.
Nur hängt das Programm in der while-Schleife....
Unter Borland würde das Ganze mit einem einfachen Application->ProcessMessages() funktionieren, nur muss ich mit VC++ arbeiten, und hab da noch nicht wirklich den Durchblick.
Vielen Dank
mfg
Rene
-
-
Aber Achtung! Das macht Deine Applikation Reentrant.
Evtl. solltest Du diesen Vorgang in einen eigenen Thread auslagern.
-
Eine While-Schleife sollte man nicht von einer Tätigkeit des Benutzers abhängig machen, sondern stets selbst kontrollieren. Der normale Weg der Windows-Programmierung geht immer über Nachrichten, entweder System-Nachrichten oder benutzerdefinierte Nachrichten. Borland oder Microsoft ist eigentlich egal.
-
Du könntest dir doch einfach alle paar Millisekunden eine WM_TIMER schicken lassen. Wenn ein Polling-Intervall von sagen wir mal 50ms OK ist ginge das gut - wenn du natürlich schneller pollen willst ... ist das weniger gut.
-
hustbaer schrieb:
Du könntest dir doch einfach alle paar Millisekunden eine WM_TIMER schicken lassen. Wenn ein Polling-Intervall von sagen wir mal 50ms OK ist ginge das gut - wenn du natürlich schneller pollen willst ... ist das weniger gut.
Geht aber nur, wenn er wieder eine Messageloop hat, die er aber ja gerade nicht hat

-
Martin Richter schrieb:
hustbaer schrieb:
Du könntest dir doch einfach alle paar Millisekunden eine WM_TIMER schicken lassen. Wenn ein Polling-Intervall von sagen wir mal 50ms OK ist ginge das gut - wenn du natürlich schneller pollen willst ... ist das weniger gut.
Geht aber nur, wenn er wieder eine Messageloop hat, die er aber ja gerade nicht hat

Ich meine er soll statt der while Schleife eine WM_TIMER schicken lassen, nen?

-
Starte einen Thread zur Button Überwachung und leg ihm mit Sleep immer ca 500ms schlafen, so daß er den DLL-Thread nicht sonderlich behindert. In diesem Thread setzt dein Button eine globale Variable die du im anderen Thread in deine while schleife abfragen kannst.
-
guggst hier kollege schrieb:
Starte einen Thread zur Button Überwachung und leg ihm mit Sleep immer ca 500ms schlafen, so daß er den DLL-Thread nicht sonderlich behindert. In diesem Thread setzt dein Button eine globale Variable die du im anderen Thread in deine while schleife abfragen kannst.
Absoluter Unsinn. Was soll denn der andere Workerthread wenn der Button dem Main Thread gehört?
Dann doch lieber die Arbeit auslagern und nicht die UI!