LB_GETCOUNT reagiert wie ein blocking call...
-
Wenn Du SendMessage (auch SendMessageTimeout) über Threadgrenzen hi9nweg verwendest, hast Du von Deinem Multithreading garnichts mehr, alles wird synchronisiert, bis die Nachrichten abgearbeitet worden sind, als ob Alles in einem Thread lääääuft.
Lass SendMessage aus einem Thread in einen anderen einfach bleiben!
-
Geht nicht!
Mein Programm soll doch reagieren, während es beschäftigt ist:
- ListBox eines fremden Fensters auslesen
- Daten verarbeiten
- 1 Sekunde Warten (Sleep())
und wieder von vorn...Es soll nicht 100x in der Sekunde diese Aufgabe tun, sondern sekundenweise (1. wegen Prozessorlast, 2. muss es die Aufgabe gar nicht so oft tun). Während dem Sleep() würde das GUI doch nicht mehr reagieren...
Wenn ich einen weiteren Thread erstelle, und dieser eine Sekunde "schläft", reagiert währenddessen das GUI... deshalb der zweite Thread.
Was gibt es noch für Möglichkeiten?
Danke!
MfG
-
Warum musst Du die Daten aus der Listbox auslesen. Halte die Daten in einer eigenen Struktur parallel und schon hast Du kein Problem mehr.
Lass das Fenster außen vor und arbeite mit den Daten!
-
ceplusplus@loggedoff schrieb:
- ListBox eines fremden Fensters auslesen
MfG
Ich werde wohl einen Windows Timer verwenden, der jede Sekunde die Auslese- und Verarbeitungsaufgabe aufruft, aber da ist noch ein anderes Problem:
Das Programm soll per Winsock fernsteuerbar sein.Die Probleme, ohne einen zusätzlichen Thread zu erstellen:
- listen() geht schonmal nicht, da es blockiert und somit auch das GUI
- select() geht nicht, weil ich nicht 100% Prozessorauslastung möchte, und Sleep(1) möchte ich nicht einbauen weil sich dann das GUI beim maximieren so langsam aufbaut...Was soll ich nur tun?
MfG
-
- listen() geht schonmal nicht, da es blockiert und somit auch das GUI
du meinst accept!

-
Jo wahrscheinlich, weiß ich ned so genau. Jedenfalls blockiert's :p
Es werden ferngesteuert auch GUI elemente verändert...
Ich weiß nicht, wie ich das alles nun am elegantesten lösen kann...
-
Während dem Sleep() würde das GUI doch nicht mehr reagieren...
Ich hab nicht den ganzen Thread hier gelesen, ... aber warum nicht einfach mit SetTimer() & WM_TIMER?
-
Jo, ist mir auch in den Sinn gekommen. Bin aber blöd, geht nämlich nicht, weil:
Ich schreibe in ein fremdes Edit und lese dann eine fremde ListBox aus. Nach dem schreiben ins Edit muss ich etwa eine halbe Sekunde warten, bis das Programm die ListBox entsprechend gefüllt hat, dann lese ich die ListBox aus und dann muss ich bis zu 64x wieder in das Edit schreiben und bei jedem Mal ein bisschen warten, bis die Information in der ListBox auftaucht...
Also:
...
- Befehl ins Edit
- 500ms warten
- ListBox auslesen
- Befehl ins Edit
- 1000ms warten
- ListBox auslesen
- Befehl ins Edit
- 500ms warten
- ListBox auslesen
- Befehl ins Edit
- 500ms warten
- ListBox auslesen
...In jedem Fall würde also das GUI blockieren, weil ich eben warten muss, bis das fremde Programm auf die Edit-Eingaben reagiert und seine ListBox füllt..
MfG
-
D.h. es ist nicht Dein Programm?
Schonmal an Hooks gedacht, die dann im Kontext des Threads aufgerufen werden?
-
Tja, nur leider nicht die geringste Ahnung, so etwas zu realisieren...
Und Zeit um das wochenlang zu lernen hab ich auch nicht, das Programm muss bald fertig sein.Ne DLL in den fremden Prozess einschleusen bekomm ich hin, aber mehr nicht...
Deshalb hab ich die einfache Variante gewählt und steuere einfach das GUI des fremden Fensters.Und nein, ich will keine lib wie zB. madCodeHook verwenden.
MfG