0
我用C++編寫了一個程序來完成某些任務。用戶選擇將完成哪些。首先,程序會對用戶選擇的全部內容進行處理,然後等待用戶指定的時間(以秒爲單位)再次執行某個任務;任務可以有不同的等待時間。定時器不能正常工作的C++程序
在我的電腦裏它工作的很好,但是我把可執行文件給了某人,他告訴我他第一次做了他選擇的任務(他只是選擇了任務3),但是在等待時間之後結束了,它什麼都沒做。我不知道問題的根源,它與我使用的相同的.exe文件,在我的電腦中工作正常,行爲應該是相同的,但由於某種原因,它不是。
我使用了msvc 2012.而且,用戶擁有Visual C++ Redistributable。
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int GetLowestWaitingTime(int* a)
int main()
{
int WaitingTime[3];
int TimeForTask[3];
bool task[3];
int i;
cout<<"1=yes 0=no. Press enter after you have typed the chosen number" <<endl;
for(i = 0; i < 3;i++){
cout<<"Do you want task " <<i+1 <<" to be performed? ";
cin >> task[i];
if(task[i])
{
cout<<"Enter the waiting time for task " <<i+1 <<" in seconds: ";
cin >> TimeForTask[i];
}else{
TimeForTask[i] = -1;
}
WaitingTime[i] = 0;
}
while(1)
{
for(i = 0; i < 3; i++){
if(task[i] && WaitingTime[i] == 0)
{
//Do task i+1
WaitingTime[i] = TimeForTask[i];
}
}
SleepTime = GetLowestWaitingTime(WaitingTime);
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2); //turn off monitor
Sleep(SleepTime*1000);
for(i = 0; i < 3; i++)
{
if(WaitingTime[i] != -1){
WaitingTime[i] -= SleepTime;
}
}
}
return 0;
}
int GetLowestWaitingTime(int* a)
{
int l = -2;
if(a[0] != -1 && ((a[0] < a[1]) || (a[1] == -1))){
l = a[0];
}else if(a[1] != -1){
l = a[1];
}
if(l == -2){l = a[2];}else if(l > a[2] && a[2] != -1){l = a[2];}
return l;
}
你有一段時間(1),你似乎沒有打出來的。 SendMessage()是否這樣做?否則,你將永遠停留在while循環中。 – wolfPack88 2013-03-06 21:07:52
它可能掛在那個SendMessage上。我不認爲它真的做你打算做的事情。 – 2013-03-06 21:51:43