Threads hier eine Lösung?
-
Der Thread sollte dem Fenster lieber Nachrichten schicken und dann kann das Fenster selbst entscheiden was es tut.
-
Tut InvalidateRect nicht WM_PAINT senden? Wenn ich mit SendMessage WM_PAINT sende kommt nix

-
Nein, UpdateWindow tut das.
-
Ich meinte es so. Wenn der Thread die Verbindung zur Datenbank herstellt, sendet er dem Fenster eine Nachricht WM_CONNECTING_TO_DATABASE
Und dann macht das Fenster:
case WM_CONNECTING_TO_DATABASE: InvalidateRect(...); return 0;
-
geht net

-
''''''''''''''''''''''''' schrieb:
Tut InvalidateRect nicht WM_PAINT senden? Wenn ich mit SendMessage WM_PAINT sende kommt nix

InvalidateRect sendet keine Nachricht, es erklärt ledigleich einen Teil des Anwendungsbreichs als ungültig. WM_PAINT kann man nicht einfach so mit SendMessage senden. UpdateWindow ist dazu da, WM_PAINT zu generieren. Versuch es halt mal.
-
Bei InvalidateRect() sendet Windows meistens ne WM_PAINT-Nachricht, aber nicht notwendigerweise sofort. Mit UpdateWindow() stellt man quasi sicher, dass ne WM_PAINT generiert wird.
-
geeky schrieb:
Bei InvalidateRect() sendet Windows meistens ne WM_PAINT-Nachricht, aber nicht notwendigerweise sofort. Mit UpdateWindow() stellt man quasi sicher, dass ne WM_PAINT generiert wird.
Ich würde sagen InvalidateRect sendet nie eine WM_PAINT Nachricht sondern das geschieht immer in GetMessage/PeekMessage.
-
geeky schrieb:
Bei InvalidateRect() sendet Windows meistens ne WM_PAINT-Nachricht, aber nicht notwendigerweise sofort.
Windows sendet sie genau dann, wenn die Nachrichtenwarteschlange leer ist. Da diese aber nicht weiter abgerabeitet wird, bevor die SQL-Abfrage fertig ist, kann sie mit UpdateWindow sofort erzeugt werden.
edit:
@meinung: genau
-
Aber wenn er doch einen Thread dafür benutzt dann wird sie doch abgearbeitet!!
-
Also was wäre denn jetzt ne Lösung??
Auf threads pfeifen und dann sowas hier tun?
bool checkData (void) { // Verbinde zur Datenbank g_infobartext = "Verbindung zur Datenbank hergestellt"; InvalidateRect (hwnd, NULL, true); UpdateWindow (hwnd); // [SQL KRAM FÜR VERBINDUNG RAUSGEWORFEN] // Tabelle auswählen g_infobartext = "Tabelle selektiert"; InvalidateRect (hwnd, NULL, true); UpdateWindow (hwnd); // [SQL KRAM FÜR TABELLENAUSWAHL RAUSGEWORFEN] // usw. }Oder was anderes?
Wenn ich diese Lösung mache gehts nicht 
-
''''''''''''''''''''''''' schrieb:
geht net

Warum nicht?

-
Ich weiß nicht
Das Programm wartet einfach bis die checkData-Funktion zuende ist und dann macht es alles in einem wisch 
-
das würde ich gerne mal sehen.
kannste den ganzen quelltext rausrücken?
-
Ich press hier auch über 50 Dateien ab!
-
na dann...du kannst ja auch ein neues beispiel basteln. statt den sql sachen machst du einfach nur Sleep
-
Also wenn "hwnd" das Fenster ist, das unter WM_PAINT den String aus "g_infobartext" anzeigt, dann funktioniert es genau so.