如何用C语言写后台程序? 15
我的思路是:写一个带sleep(1)的死循环,这样cpu占用率就不会那么高,然后用timeSetEvent函数定义一个定时器,每次到达定时时间就去执行某些操作,但是我的程...
我的思路是:写一个带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项目
我知道原因了,之所以会崩溃是因为Timer1_Timer函数的参数形式不对,timeSetEvent函数比较特殊,要求回调函数有指定的参数形式,具体可参考MSDN 展开
#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项目
我知道原因了,之所以会崩溃是因为Timer1_Timer函数的参数形式不对,timeSetEvent函数比较特殊,要求回调函数有指定的参数形式,具体可参考MSDN 展开
2个回答
展开全部
timeSetEvent(10000,1,Timer1_Timer,1,TIME_PERIODIC);
猜测第一个参数为定时时间间隔,第二个参数为时间编号,第三个参数为函数指针,第四个参数是循环次数么?第五个参数又是用来做什么?
是调用 SetTimer () 设置的定时器么?我对这个函数的内部处理不太了解。
while(!a)
{
Sleep(1);
}
我想,原因可能是这样的。当执行弹出回话框的时候,该弹出操作未完成,即执行该操作的函数栈未出完,这时Sleep()函数正好把主线程给挂起了,破坏了程序必须的某些东西,故造成程序崩溃。
猜测第一个参数为定时时间间隔,第二个参数为时间编号,第三个参数为函数指针,第四个参数是循环次数么?第五个参数又是用来做什么?
是调用 SetTimer () 设置的定时器么?我对这个函数的内部处理不太了解。
while(!a)
{
Sleep(1);
}
我想,原因可能是这样的。当执行弹出回话框的时候,该弹出操作未完成,即执行该操作的函数栈未出完,这时Sleep()函数正好把主线程给挂起了,破坏了程序必须的某些东西,故造成程序崩溃。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询