hur.cn - 华软网

 热门搜索

请问MFC定时跟踪变量除了用OnTimer还有什么方法?

  作者:未知    来源:网络    更新时间:2015/11/27
如题  ?   多线程?
---华软 网友回答---
创建一个初始无信号,手动更改信号的HEVENT,然后创建一个线程

HEVENT hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while(1)
{
//等5秒,由于hEvent一直是无信号状态,所以等5秒之后该函数就返回了
if(WAIT_TIMEOUT == WaitForSingleObject(hEvent,5*1000))
{
//你的变量跟踪逻辑
//....
//....
}
else //意思是hEvent变成有信号了,就退出当前线程,比如退出程序时,你得先关掉这个线程,只需调用SetEvent(hEvent)即可
{
break;
}
}
return 0;
}

---华软网友回复---
用事件跟踪?这样消耗CPU多么?
---华软网友回复---
引用 2 楼 crf_net 的回复:
用事件跟踪?这样消耗CPU多么?


属于内核激发,不耗CPU,你要说‘耗系统资源’嘛倒是还靠点儿普儿,比经使用了一个HEVENT内核对象嘛

跟Sleep灰常灰常类似,换句话说,上面你也可以这么改:

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while(1)
{
Sleep(5*1000);
if(bExit)
break;

//你的变量跟踪逻辑
//....
//....
}
return 0;
}


我之所以第一次不怎么写,是因为存在一种情况:
当你要退出应用程序时,线程搞好走在Sleep(5*1000); 然后你就必须死等5秒,等到线程退出后才能关闭程序,而WaitForSingleObject就不会存在这种情况,HEVENT只要是有信号了或者没信号但等待超时了,它都会立即返回

或许你又会说了,我等它干嘛,直接exit,管它线程退出没退出呢,或者我直接TerminateThread那个线程,再exit

你要真这么想的话,我也只好说“呵呵”了
---华软网友回复---
是嘛,我之前用计时器,CPU消耗高出我的意外(虽然很低),但是我发现平常的通信软件如QQ,它肯定有这方面的功能,但是其CPU安静状态很低,几乎为0
---华软网友回复---
引用 4 楼 crf_net 的回复:
是嘛,我之前用计时器,CPU消耗高出我的意外(虽然很低),但是我发现平常的通信软件如QQ,它肯定有这方面的功能,但是其CPU安静状态很低,几乎为0


你这就属于异想天开了吧

即便是while(1)这种死循环,你只要在循环里面Sleep(100),cpu立马就降到几乎为0左右
---华软网友回复---
MFC的定时器就是OnTime
除非你不想用MFC的定时器
那就用多媒体定时器也挺好
---华软网友回复---
引用 楼主 crf_net 的回复:
如题  ?   多线程?

使用面向对象的设计方法,目的就是为了使用事件处理方法在提高CPU效率,而定时器就是一种时间事件,你所说定时跟踪当然使用定时器,如果你还可以跟踪其它事件,也可用它来激活程序,除此之外貌似均不可取,这与线程无关。
---华软网友回复---
那请问下,类似QQ这样的软件,里面有监听网络是否在线这个功能,是如何实现的?计时器?
---华软网友回复---
串口打印变量
---华软网友回复---
引用 8 楼 crf_net 的回复:
那请问下,类似QQ这样的软件,里面有监听网络是否在线这个功能,是如何实现的?计时器?

发类似心跳包查询~      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。