Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;定时器不工作的程序 我用C++做了一个程序,完成了某些任务。用户选择要执行的操作。首先,程序将执行用户选择的所有任务,但随后它将等待用户指定的时间(以秒为单位)再次执行某项任务;任务可以有不同的等待时间_C++_Timer - Fatal编程技术网

C++;定时器不工作的程序 我用C++做了一个程序,完成了某些任务。用户选择要执行的操作。首先,程序将执行用户选择的所有任务,但随后它将等待用户指定的时间(以秒为单位)再次执行某项任务;任务可以有不同的等待时间

C++;定时器不工作的程序 我用C++做了一个程序,完成了某些任务。用户选择要执行的操作。首先,程序将执行用户选择的所有任务,但随后它将等待用户指定的时间(以秒为单位)再次执行某项任务;任务可以有不同的等待时间,c++,timer,C++,Timer,在我的计算机中,它工作正常,但我把可执行文件给了某人,他告诉我它第一次完成了他选择的任务(他只是选择了要完成的任务3),但即使等待时间结束后,它也什么也不做。我不知道问题的根源,它是我使用的同一个.exe文件,在我的计算机中工作正常,行为应该是相同的,但由于某些原因它不是 我用的是msvc 2012。是的,用户有VisualC++的可再分发。 #include "stdafx.h" #include <Windows.h> #include <iostream> usi

在我的计算机中,它工作正常,但我把可执行文件给了某人,他告诉我它第一次完成了他选择的任务(他只是选择了要完成的任务3),但即使等待时间结束后,它也什么也不做。我不知道问题的根源,它是我使用的同一个.exe文件,在我的计算机中工作正常,行为应该是相同的,但由于某些原因它不是

我用的是msvc 2012。是的,用户有VisualC++的可再分发。
#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;
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int GetLowestWaitingTime(int*a)
int main()
{
int WaitingTime[3];
int-TimeForTask[3];
bool任务[3];
int i;

您可以为每个索引将WaitingTime设置为0,但您的sentinel为-1,因此您的睡眠时间始终为0

为您的while循环尝试以下操作:

while(1)
{
    for(i = 0; i < 3; i++){
        if(task[i] && WaitingTime[i] == 0)
        {
            //Do task i+1
            WaitingTime[i] = TimeForTask[i];
        }
        else
        {
            WaitingTime[i] = -1;
        }
    }

    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;
        }
    }
}
while(1)
{
对于(i=0;i<3;i++){
if(任务[i]&等待时间[i]==0)
{
//完成任务i+1吗
WaitingTime[i]=TimeForTask[i];
}
其他的
{
等待时间[i]=-1;
}
}
睡眠时间=GetLowestWaitingTime(WaitingTime);
SendMessage(HWND_广播,WM_系统命令,SC_监视器电源,(LPRAM)2);//关闭监视器
睡眠时间(睡眠时间*1000);
对于(i=0;i<3;i++)
{
if(WaitingTime[i]!=-1){
WaitingTime[i]=睡眠时间;
}
}
}

您还有一段时间(1)似乎无法摆脱。SendMessage()会这样做吗?否则,您将永远停留在while循环中。它可能会挂在SendMessage上。我认为它并没有达到您的预期效果。