开发者

how to create and update window in child thread using vc++

开发者 https://www.devze.com 2023-02-05 06:58 出处:网络
I just coded a child thread to create and update window but I am facing some problem. My window closes automatically after that thread execution is completed (naturally). But I don\'t want to close it

I just coded a child thread to create and update window but I am facing some problem. My window closes automatically after that thread execution is completed (naturally). But I don't want to close it so I tried putting a while loop in thread and in that loop I am calling InvalidateRect() function so that it can update window. Now window is not closing automatically but i can't move it or interact with it and cursor also showing some busy icon(means completely not responding). How I can solve that problem. below is code:

calling this from main()

bool CameraApp::OnInit() 
{   
hThread = (HANDLE)_beginthreadex( NULL, 0, &CameraFrame::StartCameraPreview, 
    NULL, 0, &threadID );
    WaitForSingleObject( hThread, INFINITE );
    CloseHandle( hThread );

    return TRUE;
} 

Thread function block

unsigned __stdcall CameraFrame::StartCameraPreview( void* pArgs )
{
cFrame.ShowCameraWindow();
开发者_JAVA百科
while(1)
{       
    cFrame.StartCapture();
    InvalidateRect(hwnd, NULL, false);
    Sleep(5000);
}
_endthreadex( 0 );
    return 0;
} 

i can't use main() function to create window. So, i have to use thread and update that window with periodic image taken from web-camera.


Instead of your infinite loop you need to create message pump in secondary thread that processes windows messages.

unsigned __stdcall CameraFrame::StartCameraPreview( void* pArgs )
{
    cFrame.ShowCameraWindow();

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    _endthreadex( 0 );
    return 0;
} 
0

精彩评论

暂无评论...
验证码 换一张
取 消