DialogBox-Problem
-
geht das nicht anders? Muss das in einem Thread stattfinden?
-
ok. Ich habe es jetzt mit einem Thread gemacht.
Das Programm sieht jetzt so aus:#define WIN32_LEAN_AND_MEAN #include <windows.h> #include "resource.h" #include <string> #include <windowsx.h> #include <stdio.h> BOOL CALLBACK DialogProc (HWND, UINT, WPARAM, LPARAM) ; HWND hWndDlg=NULL; FILE *pfile; HANDLE hThread; DWORD dwThreadID; DWORD WINAPI ThreadFunc(LPVOID data) { pfile=fopen("hallo.txt","w"); while(true) { static int i=0; static int c=0; i++; if(i>1000) { fprintf(pfile,"%d\n",c++); i=0; } } fclose(pfile); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { hThread= CreateThread(NULL, 0, ThreadFunc, (LPVOID)0,0,&dwThreadID); DialogBox(hInstance, MAKEINTRESOURCE(ID_DIALOG1), NULL, (DLGPROC)DialogProc); return 0; } BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_CLOSE: EndDialog(hwnd,0); CloseHandle(hThread); return TRUE; } return FALSE; }
Nur wie kann ich jetzt eine Message (aus der Thread-Funktion) an meine Static-Textfeld aus meiner Dialogbox senden?
-
Erstmal: Benutz statt CreateThread den Wrapper BeginThread, dann solltest du in den Projekt-Optionen angeben, dass es eine Multithread-Anwendung ist.
Dann kannst du auf das Static auch aus dem Thread raus zugreifen, du solltest den Zugriff nur threadsafe machen und CriticalSections benutzen, sonst kann es passieren, dass es kracht.
-
was muss man denn da beachten?
-
Wie kann ich denn mein Programm Threadsicher machen?
-
Wie kann ich denn das HWND einer Dialogbox bekommen, wenn ich sie mit der Funktion DialogBox() erstellt habe?
-
Original erstellt von <SlimTimmy>:
Wie kann ich denn mein Programm Threadsicher machen?In dem di, wie ich schon gesagt habe, CriticalSections benutzt.
-
*push*
Wie kann ich denn nun das HWND des Dialogs bekommen?
-
das handle bekommst du doch in der DlgProc
-
eigentlich wollte ich es so machen, dass ich mir im Thread dann das HWND hole, damit ich keine globale Variablen brauche. Wenn man WinAPI-Funktionen aufruft, sind die dann Threadsicher?