Ich habe mehrere Anwendungen, die alle nahezu das Gleiche machen
Einen Dialog öffnen
Gleichzeitig mit einem timergesteuerten Thread, via WinInet alle 15 Sekunden Daten von einem php Script auf meiner HP abrufen (als Thread damit die Anwendung beim Verbindungsaufbau nicht hängen bleibt)
Die empfangenen Daten innerhalb des Thread verarbeiten und bei Bedarf mit
Teile des Dialogs oder auch das ganze Fenster refreshen
Das Ganze funktioniert völlig einwandfrei, mit einer winzigen Ausnahme
Die Grösste dieser Anwendungen (ca 23.000 Zeilen Code in API plain) flackert unter Vista einmal kurz, immer dann wenn der Thread die Verbindung zum Server aufbaut
Ich habe es an 2 verschiedenen Rechnern ausprobiert, mit völlig anderer Hardware, einer Intel, einer AMD, einer NVidia einer ATI, einer 2GB RAM, einer 4GB, mit 32 bit Vista und 64 bit, mit 32 bit XP und 64 bit, unter Vista flackert es immer unter XP nie
Meine kleineren Anwendungen (bis 15000 Zeilen Code) flackern nicht, auch andere Software mit Server Verbindungen flackert nicht, und der Code für den Thread ist nahezu identisch
Ich habe es so weit einkreisen können, dass es nicht flackert, wenn vom Server weniger als 1kb Antwort kommt oder ich die Verarbeitung der empfangenen Daten auskommentiere, aber ich kann mir nicht vorstellen, warum die Länge einer Funktion innerhalb eines Thread Auswirkungen auf den refresh des hwnd haben sollte, zumal es nur unter Vista auftritt und nicht unter XP
Kann mir jemand sagen, was da das Problem ist und wie man das löst?
Müssen Threads unter Vista evtl anders aufgebaut sein?
Einen Dialog öffnen
Code:
...
wc.style = CS_HREDRAW | CS_VREDRAW;
...
hwnd = CreateWindowEx(
WS_EX_COMPOSITED,
mainwindowname,
dialogname,
WS_POPUP | WS_VISIBLE | WS_SIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
HWND_DESKTOP,
NULL,
hinstance,
NULL
);
Gleichzeitig mit einem timergesteuerten Thread, via WinInet alle 15 Sekunden Daten von einem php Script auf meiner HP abrufen (als Thread damit die Anwendung beim Verbindungsaufbau nicht hängen bleibt)
Die empfangenen Daten innerhalb des Thread verarbeiten und bei Bedarf mit
Code:
InvalidateRect(Fenstername, NULL, FALSE);
Teile des Dialogs oder auch das ganze Fenster refreshen
Das Ganze funktioniert völlig einwandfrei, mit einer winzigen Ausnahme
Die Grösste dieser Anwendungen (ca 23.000 Zeilen Code in API plain) flackert unter Vista einmal kurz, immer dann wenn der Thread die Verbindung zum Server aufbaut
Ich habe es an 2 verschiedenen Rechnern ausprobiert, mit völlig anderer Hardware, einer Intel, einer AMD, einer NVidia einer ATI, einer 2GB RAM, einer 4GB, mit 32 bit Vista und 64 bit, mit 32 bit XP und 64 bit, unter Vista flackert es immer unter XP nie
Meine kleineren Anwendungen (bis 15000 Zeilen Code) flackern nicht, auch andere Software mit Server Verbindungen flackert nicht, und der Code für den Thread ist nahezu identisch
Ich habe es so weit einkreisen können, dass es nicht flackert, wenn vom Server weniger als 1kb Antwort kommt oder ich die Verarbeitung der empfangenen Daten auskommentiere, aber ich kann mir nicht vorstellen, warum die Länge einer Funktion innerhalb eines Thread Auswirkungen auf den refresh des hwnd haben sollte, zumal es nur unter Vista auftritt und nicht unter XP
Kann mir jemand sagen, was da das Problem ist und wie man das löst?
Müssen Threads unter Vista evtl anders aufgebaut sein?