我刚编写了一个子线程来创建和更新窗口,但我遇到了一些问题。完成线程执行后,我的窗口会自动关闭(自然)。但我不想关闭它,所以我尝试在线程中放置一个while循环,在该循环中我调用InvalidateRect()
函数,以便它可以更新窗口。现在窗口没有自动关闭,但我无法移动它或与它交互,光标也显示一些忙碌的图标(意味着完全没有响应)。我怎么能解决这个问题。下面是代码:
从main()
调用此方法bool CameraApp::OnInit()
{
hThread = (HANDLE)_beginthreadex( NULL, 0, &CameraFrame::StartCameraPreview,
NULL, 0, &threadID );
WaitForSingleObject( hThread, INFINITE );
CloseHandle( hThread );
return TRUE;
}
线程功能块
unsigned __stdcall CameraFrame::StartCameraPreview( void* pArgs )
{
cFrame.ShowCameraWindow();
while(1)
{
cFrame.StartCapture();
InvalidateRect(hwnd, NULL, false);
Sleep(5000);
}
_endthreadex( 0 );
return 0;
}
我无法使用main()
函数创建窗口。因此,我必须使用线程并使用从网络摄像头拍摄的周期性图像更新该窗口。
答案 0 :(得分:2)
您需要在处理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;
}