我的思路是:寫一個帶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()函數正好把主線程給掛起了,破壞了程序必須的某些東西,故造成程序崩潰。
- 2 回答
- 0 關注
- 228 瀏覽
添加回答
舉報
0/150
提交
取消