亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如圖所示,我的程序每次運行到第一個定時時間到達后程序就崩潰,這是為什么?

如圖所示,我的程序每次運行到第一個定時時間到達后程序就崩潰,這是為什么?

慕神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 關注
  • 228 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號