Beispielprogramm funzt nicht? Threads
-
Hi, ich bin ja gerade am lernen. Hier ein Beispielprogramm aus einem Lehrbuch das nicht compiliert.
Der Compiler findet den Beizeichner hWindow nicht.
Ich habe leider noch keine Erfahrung mit Threads, deshalb habe ich auch keine Ahnung, was da nicht stimmt.
Kann mir jemand helfen?#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); DWORD WINAPI ThreadProc (LPVOID); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS WndClass; WndClass.style =0; WndClass.cbClsExtra =0; WndClass.cbWndExtra =0; WndClass.lpfnWndProc = WndProc; WndClass.hInstance = hInstance; WndClass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1); WndClass.hCursor = LoadCursor (NULL, IDC_ARROW); WndClass.hIcon = LoadIcon (NULL, IDI_APPLICATION); WndClass.lpszMenuName =0; WndClass.lpszClassName = "Thread2"; RegisterClass(&WndClass); HWND hWindow,hButton; hWindow = CreateWindow("Thread2","Thread-Fenster", WS_OVERLAPPEDWINDOW, 0,0,400,400,NULL,NULL, hInstance,NULL); hButton = CreateWindow("BUTTON","Start Thread 2",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 10,200,200,20,hWindow,(HMENU) 1,hInstance,NULL); hButton = CreateWindow("BUTTON","Ende Thread 2",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 10,240,200,20,hWindow,(HMENU) 2,hInstance,NULL); ShowWindow (hWindow, nCmdShow); UpdateWindow (hWindow); MSG Message; while (GetMessage(&Message,NULL,0,0)) { DispatchMessage(&Message); } return (Message.wParam); } DWORD WINAPI ThreadProc(LPVOID pvoid) { int wert = 2; while(wert==2) { HDC hdc1; hdc1 = GetDC(hWindow); Rectangle(hdc1,rand()%200,rand()%200,rand()%200,rand()%200); ReleaseDC(hWindow,hdc1); } return 0; } LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMessage, WPARAM wParam,LPARAM lParam) { static HANDLE hThread; switch(uiMessage) { case WM_COMMAND: if (HIWORD(wParam)==BN_CLICKED) { if (LOWORD(wParam)==1) { DWORD dwThreadParam = 1; DWORD dwThreadID; hThread = CreateThread(NULL,0,ThreadProc,&dwThreadParam,0,&dwThreadID); } if (LOWORD(wParam) == 2) { TerminateThread(hThread,0); } } return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc (hWnd, uiMessage, wParam, lParam); } }P.S.: Bitte nicht zu schwierig erklären!
Gruß
-
HWND hWindow;sollte global sein oder parameter mit an den thread übergeben werden.
wobei zweite variante die schönere und imho die bessere ist.
-
Danke für den Hinweiß. Müsste man eigentlich auch selber drauf kommen, aber wenn es aus einem Lehrbuch stammt, kommt man einfach nicht auf so einen "blöden" Fehler.
Aber wie soll ich hWindow als Parameter übergeben. Ich habe das mal versucht, aber er macht es irgendwie nicht.
-
[cpp]
// wndproc
hThread = CreateThread(NULL,0,ThreadProc,**hWnd,**0,&dwThreadID);DWORD WINAPI ThreadProc(LPVOID pvoid)
{
HWND hWindow = (HWND)pvoid;
}
[/cpp]
-
Danke, hat geklappt!
Gruß