我有一个在 Windows 中设置窗口的方法,用 C 编写。它使用如下所示的标准代码:
WNCDCLASS w1 = {0};
w1.lpszClassName = TEXT( "the_window" );
w1.lpfnWndProc = methodIWantOnItsOwnThread;
// snip
现在,我已经在以下方法中使用 <process.h> 线程进行多线程处理:
HANDLE h;
h = (HANDLE) _beginthread(methodIWantOnItsOwnThread, 0, 0);
如何在 Windows 回调函数中像这样多线程,例如使用 w1.lpfnWndProc = methodIWantOnItsOwnThread;
?
更多代码。
HWND SetupWindow(int device)
{
HWND hwnd;
WNDCLASS w1 = {0};
if (device == 1)
{
w1.lpszClassName = TEXT( "window 1" );
w1.lpfnWndProc = methodIWantThreaded;
}
else
{
w1.lpszClassName = TEXT( "window 2" );
w1.lpfnWndProc = otherMethodIWantThreaded;
}
w1.hInstance = 0;
w1.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
w1.hCursor = LoadCursor(0, IDC_ARROW);
RegisterClass(&w1);
hwnd = CreateWindow( w1.lpszClassName, TEXT("The Window"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 520, 650, 520, NULL, NULL, 0, NULL);
SetTimer(hwnd, 0,30,NULL);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
return hwnd;
}
最佳答案
你正在倒退,这是行不通的。
您应该让每个窗口创建一个线程,而不是每个线程创建一个窗口。然后,您只需创建 WNDCLASS
类名的多个实例,每个实例都有自己的可以发布和接收消息的线程。
这还为您提供了一个窗口句柄,主线程的窗口可以使用该句柄发送和接收消息,从而允许您与线程进行通信(反之亦然)。
关于c - 多线程 Windows 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5599395/