Multithreading 如何使用vc+在子线程中创建和更新窗口+;

Multithreading 如何使用vc+在子线程中创建和更新窗口+;,multithreading,visual-studio-2010,process,visual-c++,Multithreading,Visual Studio 2010,Process,Visual C++,我刚刚编写了一个子线程来创建和更新窗口,但我遇到了一些问题。我的窗口在线程执行完成后自动关闭(自然)。但我不想关闭它,所以我尝试在线程中放置一个while循环,并在该循环中调用invalidate()函数,以便它可以更新窗口。现在窗口并没有自动关闭,但我无法移动它或与之交互,光标也显示一些繁忙的图标(意味着完全没有响应)。我怎样才能解决那个问题。代码如下: 从main()调用此函数。 线程功能块 unsigned __stdcall CameraFrame::StartCameraPreview

我刚刚编写了一个子线程来创建和更新窗口,但我遇到了一些问题。我的窗口在线程执行完成后自动关闭(自然)。但我不想关闭它,所以我尝试在线程中放置一个while循环,并在该循环中调用
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;
}