为了账号安全,请及时绑定邮箱和手机立即绑定

如图所示,我的程序每次运行到第一个定时时间到达后程序就崩溃,这是为什么?

如图所示,我的程序每次运行到第一个定时时间到达后程序就崩溃,这是为什么?

慕神8447489 2022-06-16 16:11:06
我的思路是:写一个带sleep(1)的死循环,这样cpu占用率就不会那么高,然后用timeSetEvent函数定义一个定时器,每次到达定时时间就去执行某些操作,但是我的程序每次运行到第一个定时时间到达后程序就崩溃,这是为什么?#include "windows.h"#pragma comment(lib,"Winmm")int a=0;VOID CALLBACK Timer1_Timer(){MessageBox(NULL,"timer1在运作","",MB_OK);}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow){timeSetEvent(10000,1,Timer1_Timer,1,TIME_PERIODIC);while(!a){Sleep(1);}return 1;}我建立的是win32项目
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

timeSetEvent(10000,1,Timer1_Timer,1,TIME_PERIODIC);
猜测第一个参数为定时时间间隔,第二个参数为时间编号,第三个参数为函数指针,第四个参数是循环次数么?第五个参数又是用来做什么?
是调用 SetTimer () 设置的定时器么?我对这个函数的内部处理不太了解。
while(!a)
{
Sleep(1);
}
我想,原因可能是这样的。当执行弹出回话框的时候,该弹出操作未完成,即执行该操作的函数栈未出完,这时Sleep()函数正好把主线程给挂起了,破坏了程序必须的某些东西,故造成程序崩溃。

查看完整回答
反对 回复 2022-06-20
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

Sleep(1);括号里的单位为毫秒,改大点试试

查看完整回答
反对 回复 2022-06-20
  • 2 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信