Mam taki problem - kod jest banalny - oprocz wyswietlenia okienka nie robi kompletnie nic. A jednak - zajętość procesora nie schodzi poniżej 97%. Dlaczego tak jest i co zrobic, zeby tak nie bylo?
#include <windows.h>
// Global event handle. This event is set when we the main window thread
// wants to finish its existence
HANDLE hGlobalEvent;
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
// message send when we want to close the window
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
// default window procedure
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0L;
}
DWORD WINAPI mainWindowThread(LPVOID lpParameter)
{
HINSTANCE hInstance = *((HINSTANCE*)(lpParameter));
// define the new window class structure
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_3DFACE);
wc.lpszMenuName = NULL;
wc.lpszClassName = "MAIN_WINDOW";
wc.hIconSm = NULL;
// register new window class
if(!RegisterClassEx(&wc))
return 1;
// create main window program based on the previously registered window class
HWND hWnd = CreateWindowEx( NULL, "MAIN_WINDOW", "main_window", WS_OVERLAPPEDWINDOW,
50, 50, 800, 600, NULL, NULL, hInstance, NULL);
// show the window
ShowWindow(hWnd, SW_NORMAL);
// message loop
MSG message;
while(true)
{
if( PeekMessage(&message, NULL, 0, 0, PM_REMOVE) )
{
if(message.message == WM_QUIT)
break;
TranslateMessage(&message);
DispatchMessage(&message);
}
}
SetEvent(hGlobalEvent);
return message.wParam;
}
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// we have to synchronize the main window thread with the main program thread,
// meaning that until the main window thread doesn't exit, the main program
// thread doesn't exit as well...
// create a synchronizing event with initial state set to false
hGlobalEvent = CreateEvent(NULL, true, false, "MAIN_WINDOW_THREAD_EVENT");
// create a thread for the main window
DWORD ThreadID;
HANDLE hThread = CreateThread(NULL, 0, mainWindowThread, &hInstance, 0, &ThreadID);
// wait until the state of the synchronizing event is set to true
if( WaitForMultipleObjects(1, &hGlobalEvent, true, INFINITE) != WAIT_OBJECT_0 )
MessageBox(NULL, "Synchronization error", "Error", MB_OK);
// close the main window thread handle
CloseHandle(hThread);
}
Z gory dzieki za pomoc