我在VC。NET 下建了一个空窗体,什么都没干,却发现CPU使用100%,这是为什么啊

tigerlhp 2008-03-15 09:03:36
我在VC。NET 下建了一个空窗体,什么都没干,却发现CPU使用100%,这是为什么啊
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pause_break 2008-03-18
  • 打赏
  • 举报
回复
getmessage和peekmessage都是获取消息队列里的消息;不同的是getmessage在获取不到对应的消息时程序会被操作系统挂起cpu就让给其它程序,而peekmessage在获取不到合适消息时并不把控制权马上交回去他会让自己的程序得以再执行一段时间。
Rainstorey 2008-03-17
  • 打赏
  • 举报
回复
peekmessage基本用在游戏程序中.一搬窗口就用GetMessage.
sniperhuangwei 2008-03-17
  • 打赏
  • 举报
回复
peek是不管有没有消息都会返回,
get在没有消息的时候被阻塞,有消息才返回.
不知道对不对啊,没在win上写过程序.
过去的我 2008-03-15
  • 打赏
  • 举报
回复
消息不是加在这里的啊,是回调函数中处理的,你用vc自动生成一个win32的helloworld程序看看就知道了
tigerlhp 2008-03-15
  • 打赏
  • 举报
回复
那我应该怎么写
count();
paint(hdc);
这两个函数应该放在什么地方好。
0黄瓜0 2008-03-15
  • 打赏
  • 举报
回复

if()
{...}
else
{...}
都这样了,有消息要处理消息,没消息要处理你的else块,自然要占完cpu了.
michney 2008-03-15
  • 打赏
  • 举报
回复
这个叫做busy waiting
tigerlhp 2008-03-15
  • 打赏
  • 举报
回复
// 主消息循环:
while (true)
{

if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}

TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{

tNow = GetTickCount();

int numT = 40 - tDur; //DWORD类型是无符号类型的
if(numT < 0) numT = 0;

if(tNow - tEnd >= numT || tNow - tEnd < 0)
{
tEnd = GetTickCount();
tDur = tEnd - tNow;
count();
paint(hdc);

}
}
}

我用以上消息循环就100的CPU处理,那消息循环有错吗
hastings 2008-03-15
  • 打赏
  • 举报
回复
恭喜你,编了个病毒程序..哈.哈..
tigerlhp 2008-03-15
  • 打赏
  • 举报
回复
照你说的做了。
/*
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
*/

用下面代码取代了上面的,立刻就100%的CPU使用。请教一下怎么回事?

DWORD tNow,tEnd,tDur;
while (true)
{

if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}

TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{

tNow = GetTickCount();

int numT = 40 - tDur; //DWORD类型是无符号类型的
if(numT < 0) numT = 0;

if(tNow - tEnd >= numT || tNow - tEnd < 0)
{
tEnd = GetTickCount();
tDur = tEnd - tNow;
//count();
//paint(hdc);

}
}
}

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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