建立线程时如何降低CPU使用率

malingfeng 2004-07-20 08:49:21
我想实现在处理时间比较长的任务时,显示一个动画窗口提示任务正在处理中。所以我创建了一个新的线程,该线程中创建了一个非模态的对话框,在该对话框上用了一个animate控件。如果在创建该对话框后使用死循环的话,就不会显示动画,而且CPU占用率为100%。所以我使用GetMessage,然后DispatchMessage的方法,不知道有没有什么问题。还有就是我使用CreateThread建立线程,是否不需要显式的结束线程。在该线程结束后,是否会自动释放资源,而不需要使用DestroyWindow。
我是初学者,请多多指教
...全文
346 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
louifox 2004-07-25
  • 打赏
  • 举报
回复
贴点代码出来
malingfeng 2004-07-24
  • 打赏
  • 举报
回复
有谁回答我的那个问题啊
一条晚起的虫 2004-07-21
  • 打赏
  • 举报
回复
同意skyMountain(天山) ,sleep(0)吧
skyMountain 2004-07-21
  • 打赏
  • 举报
回复
"CPU占用率为100%"
线程死循环的CPU占用率当然是100%,你可以在循环中加上sleep(10)这样的语句调节它的CPU使用率。
malingfeng 2004-07-20
  • 打赏
  • 举报
回复
to vcforever(霓裳羽衣) :
不好意思,不大懂MFC,我是用的SDK,你能不能用C描述一下。

to snowroad(雪程) :
请问如果不使用循环的话,该线程创建后就马上运行,窗口一闪就没了,线程也结束了。请问我使用发送消息的方法对不对。
snowroad 2004-07-20
  • 打赏
  • 举报
回复
这和CPU无关吧?
使用DestroyWindow(hWnd)后,再用ExitThread就可以了。进程句柄不用管的。
vcforever 2004-07-20
  • 打赏
  • 举报
回复
你可以创建一个UI线程,来显示动画

从CWinThread类派生一个子类,比如CMyThread类,在InitInstance函数中创建你药显示动画的窗口
例如:
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线程的执行!

一个思路,希望对你有所帮助!
malingfeng 2004-07-20
  • 打赏
  • 举报
回复
我用的Celeron的CPU,我用HP的服务器(好象是P4的)也一样啊
是不是需要先调用DestroyWindow,再使用ExitThread啊。
to freefalcon(心宇—小小菜鸟想高飞),用return就可以结束了吗,不使用CloseHandle吗
freefalcon 2004-07-20
  • 打赏
  • 举报
回复
窗口不会自动Destroy,需要你自己编码实现

另:线程的安全结束方法是线程函数return
名牌大灰狼 2004-07-20
  • 打赏
  • 举报
回复
如果是HT型的CPU那应该和你BIOS有关.如果不是.我就不知道了
名牌大灰狼 2004-07-20
  • 打赏
  • 举报
回复
你的CPU是不是P4(HT)型号的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧