哪位大侠推荐一个好的timer吗?不需要从cwnd继承的
解决方案 »
- 我用delphi做的ocx和htm文件,不能正常打开,谁给个范例
- 如何在某一个复杂操作过程中(读数据库)动态改变鼠标的形状,并在操作完成后恢复鼠标原来的形状
- vc下怎样访问一个文件夹中大量的文本文件?好象有封装好的类,请指教,最好给出用法,谢谢
- 如何执行API程序
- msvcrt.dll 或MFC40.DLL异常问题
- 请问在vc 中怎么设置 水晶报表的数据源是 Access ,并指定Sql 语句.
- 急急急,谁有二唯码动态连接库请发给我一份
- vc++与c#,java那个好?
- 怎么实现撤销和恢复
- 网络监控问题
- 怎么在对话框里用鼠标拖动按纽???
- 不容易呀,软件经过一年的开发与测试,个人版终于发布了。
API,
UINT_PTR SetTimer(
HWND hWnd,
UINT_PTR nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc
);
有没有什么timer可以立即停止计时,同时立即停止执行代码的呢?如果我的timer在另一个多线程中设置,同时会用到这个线程中的一个类对象,当在这个线程中killtimer后,同时构析了那个类对象,但实际我的timer仍然在继续执行时,就会有问题,怎么解决这个问题呢?
我用try,和一个事件对象锁定能解决,但有没有更好的办法呢?如果有一个timer的killtimer能立即停止ontimer就好了谢谢
删除Timer之后仍然可能收到WM_TIMER消息
这个我试过了啊,但我觉得windows没有立即杀掉正在执行的ontimer函数
这个我试过了啊,但我觉得windows没有立即杀掉正在执行的ontimer函数
因为一般OnTimer是由主线程执行的,
如果杀掉,整个程序就结束了.如果一定要杀掉,执行exit(0);好了.
首先给主进程的ontimer加入一个开关,BOOl Csomeclass::IsOutTimer,当ontimer执行开始时设置为False,当ontimer退出前设置为True主进程:定义一个Csomeclass*指针,启动子线程,将Csomeclass*传入子线程:
1.定义一个CsomeClass类对象,将主进程传入的CsomeClass*指针指向这个类对象地址,
2.同时启动主进程的ontimer,
3.然后对CsomeClass进行计算
4.主进程:这时ontimer正用那个CsomeClass指针得到子线程实际计算的结果
5.正常计算完毕
6.killtimer
7.等待Ontimer执行完毕
while (true)
{
if (CsomeClass::IsOutTimer) break;
::sleep(50);
}
8.退出子线程,同时构析CsomeClass
但是我总觉得还有更好的方法,比如有人告诉我说,在第7步的::sleep(50)有时会让子线程就这么睡下去,可能永远得不到唤醒,是这样吗,请各位大侠指教,谢谢谢谢谢谢
执行OnTimer前的初始值是多少?如果为false,
在OnTimer一次都没有执行的情况下.
while (true)
{
if (CsomeClass::IsOutTimer) break;
::sleep(50);
}
将成为死循环.
这个死循环的形成和 ::sleep(50);没有关系.可以考虑将(6)和(7)的顺序交换一下.