Multithreading 如何使用vc+在子线程中创建和更新窗口+;
我刚刚编写了一个子线程来创建和更新窗口,但我遇到了一些问题。我的窗口在线程执行完成后自动关闭(自然)。但我不想关闭它,所以我尝试在线程中放置一个while循环,并在该循环中调用Multithreading 如何使用vc+在子线程中创建和更新窗口+;,multithreading,visual-studio-2010,process,visual-c++,Multithreading,Visual Studio 2010,Process,Visual C++,我刚刚编写了一个子线程来创建和更新窗口,但我遇到了一些问题。我的窗口在线程执行完成后自动关闭(自然)。但我不想关闭它,所以我尝试在线程中放置一个while循环,并在该循环中调用invalidate()函数,以便它可以更新窗口。现在窗口并没有自动关闭,但我无法移动它或与之交互,光标也显示一些繁忙的图标(意味着完全没有响应)。我怎样才能解决那个问题。代码如下: 从main()调用此函数。 线程功能块 unsigned __stdcall CameraFrame::StartCameraPreview
invalidate()
函数,以便它可以更新窗口。现在窗口并没有自动关闭,但我无法移动它或与之交互,光标也显示一些繁忙的图标(意味着完全没有响应)。我怎样才能解决那个问题。代码如下:
从main()调用此函数。
线程功能块
unsigned __stdcall CameraFrame::StartCameraPreview( void* pArgs )
{
cFrame.ShowCameraWindow();
while(1)
{
cFrame.StartCapture();
InvalidateRect(hwnd, NULL, false);
Sleep(5000);
}
_endthreadex( 0 );
return 0;
}
我无法使用
main()
函数创建窗口。因此,我必须使用线程,并使用从网络摄像头拍摄的定期图像更新该窗口。您需要在处理windows消息的次线程中创建消息泵,而不是无限循环
unsigned __stdcall CameraFrame::StartCameraPreview( void* pArgs )
{
cFrame.ShowCameraWindow();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
_endthreadex( 0 );
return 0;
}
我如何更新窗口,它将根据消息更新?创建计时器,每N秒更新一次窗口。您可以在此消息循环中处理WM_计时器,也可以为您的窗口创建窗口进程。
unsigned __stdcall CameraFrame::StartCameraPreview( void* pArgs )
{
cFrame.ShowCameraWindow();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
_endthreadex( 0 );
return 0;
}