Threads hier eine Lösung?
-
Teflon13 meinte: Erstell einen Thread, in dem du die bool checkData (void)
funktion drin am laufen hast, und eine, in dem du den rest machst... dann kannst du den rest unabhängig zu checkData aktualliesieren -.-
-
was meinst du mit rest? das programm läuft doch schon in einem Thread?
Oder könntest du das ggf. hierarisch darstellen?

-
*push*
-
Einfach UpdateWindow(hwnd); nach InvalidateRect aufrufen und schon wird das Fenster sofort neu gezeichnet.
Nur damit es einmal neu gezeichnet wird ist ein Thread etwas überdimensioniert, aber dafür würde das Fenster dann auch auf alle Benutzereingaben reagieren können und es würde neu gezeichnet werden, wenn dein Fenster während der SQL-Abfrage kurzzeitig überdeckt wird.
-
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