我想实现在处理时间比较长的任务时,显示一个动画窗口提示任务正在处理中。所以我创建了一个新的线程,该线程中创建了一个非模态的对话框,在该对话框上用了一个animate控件。如果在创建该对话框后使用死循环的话,就不会显示动画,而且CPU占用率为100%。所以我使用GetMessage,然后DispatchMessage的方法,不知道有没有什么问题。还有就是我使用CreateThread建立线程,是否不需要显式的结束线程。在该线程结束后,是否会自动释放资源,而不需要使用DestroyWindow。
我是初学者,请多多指教
我是初学者,请多多指教
是不是需要先调用DestroyWindow,再使用ExitThread啊。
to freefalcon(心宇—小小菜鸟想高飞),用return就可以结束了吗,不使用CloseHandle吗
例如:
BOOL CMyNewThread::InitInstance()
{
RECT rc;
rc.bottom = 300;
rc.top = 100;
rc.left = 100;
rc.right = 400;
m_Frame = new CMyFrame();
int frame = m_Frame->Create(NULL,"Frame",WS_OVERLAPPEDWINDOW,rc,this->m_pMainWnd);
m_Frame->SetParent(m_pMainWnd->GetParent());
m_Frame->ShowWindow(SW_SHOW);
m_Frame->UpdateWindow();
return TRUE;//
}
CMyFrame类是从CFrameWnd派生的一个子类,是一个框架窗口,视你的要求而定,你可以设置窗口的风格,比如无边框等等,来达到显示动画更好的效果!在主线程中你可以这样启动UI线程m_pNewThread = new CMyNewThread();
m_pNewThread->m_pMainWnd = this->GetParent();
m_pNewThread->CreateThread();
.m_NewThread为指向CMyWinThread类的指针,在头文件中定义如下;
CMyNewThread* m_pNewThread;
.在主线程计算任务结束之后可以通过使用
PostThreadMessage(m_pNewThread->m_nThreadID, WM_CLOSE, 0, 0);
消息来结束UI线程的执行!一个思路,希望对你有所帮助!
使用DestroyWindow(hWnd)后,再用ExitThread就可以了。进程句柄不用管的。
不好意思,不大懂MFC,我是用的SDK,你能不能用C描述一下。to snowroad(雪程) :
请问如果不使用循环的话,该线程创建后就马上运行,窗口一闪就没了,线程也结束了。请问我使用发送消息的方法对不对。
线程死循环的CPU占用率当然是100%,你可以在循环中加上sleep(10)这样的语句调节它的CPU使用率。