T
Ich habe mir für mich mal einen Muster-Thread gebastelt.
Vielleicht kannst du damit was anfangen.
Du musst dein Projekt vor dem Compilieren auf Multithreaded einstellen.
/*-----------------------------------------------------------------------
Muster-Thread.cpp
www.winapi.net
-----------------------------------------------------------------------*/
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
// global
typedef struct
{
volatile BOOL ThreadStoppen;
}PARAMS, *PPARAMS;
static unsigned uThreadId;
unsigned __stdcall ThreadFunc(void*);
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Class-Name");
HWND hwnd;
MSG msg;
WNDCLASSEX wndclassex = {0};
wndclassex.cbSize = sizeof(WNDCLASSEX);
wndclassex.style = CS_HREDRAW | CS_VREDRAW;
wndclassex.lpfnWndProc = WndProc;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclassex.lpszMenuName = NULL;
wndclassex.lpszClassName = szAppName;
wndclassex.hIconSm = wndclassex.hIcon;
if (!RegisterClassEx (&wndclassex))
{
MessageBox (NULL, TEXT ("RegisterClassEx fehlgeschlagen!"),
szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil
szAppName, // Name der Fensterklasse
TEXT ("Fenstertitel"), // Fenstertitel
WS_OVERLAPPEDWINDOW, // Fensterstil
CW_USEDEFAULT, // X-Position des Fensters
CW_USEDEFAULT, // Y-Position des Fensters
CW_USEDEFAULT, // Fensterbreite
CW_USEDEFAULT, // Fensterhöhe
NULL, // übergeordnetes Fenster
NULL, // Menü
hInstance, // Programm-Kopiezähler (Programm-ID)
NULL); // zusätzliche Parameter
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static PARAMS params;
switch (message)
{
case WM_CREATE:
params.ThreadStoppen = FALSE;
_beginthreadex (NULL, 0, &ThreadFunc, ¶ms, 0, &uThreadId);
return (0);
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
EndPaint (hwnd, &ps);
return (0);
case WM_DESTROY:
params.ThreadStoppen = TRUE;
PostQuitMessage (0);
return (0);
}
return DefWindowProc (hwnd, message, wParam, lParam);
}
/////////////////////////////////////////////////////////////////////////////////
// die Thread-Funktion
unsigned __stdcall ThreadFunc(void* pVoid)
{
PPARAMS pparams;
pparams = (PPARAMS) pVoid;
while (!pparams->ThreadStoppen) // solange weitermachen bis TRUE
{
MessageBeep (MB_ICONQUESTION);
Sleep (1000);
}
return (1);
}