如何对特定日期和时间触发的事件作出反应 我在Windows 7中使用VisualStudio编写C++应用程序。该应用程序是一个单页MFC对话框应用程序。我想有一个消息框弹出时,一定的时间和日期已经达到。我使用一个日期选择器来获取将用作触发器的指定日期,并使用CTime对象来存储当前时间和预期时间

如何对特定日期和时间触发的事件作出反应 我在Windows 7中使用VisualStudio编写C++应用程序。该应用程序是一个单页MFC对话框应用程序。我想有一个消息框弹出时,一定的时间和日期已经达到。我使用一个日期选择器来获取将用作触发器的指定日期,并使用CTime对象来存储当前时间和预期时间,c++,visual-c++,mfc,scheduled-tasks,C++,Visual C++,Mfc,Scheduled Tasks,不幸的是,我不知道从哪里开始寻找。是否存在每分钟向窗口发送一次通知或消息的对象?如果没有,我有没有具体的方法来完成这个任务,或者建议我从哪里开始寻找 编辑:是否可以计算当前日期和未来日期之间的秒数,并创建一个单独的倒计时线程(使用计时器)?以下是接收计时器事件所需实现的功能的大致示意图: UINT_PTR timerId = NULL; void OnTimerEvent(HWND, UINT, UINT_PTR id, DWORD) { if (timerId == id)

不幸的是,我不知道从哪里开始寻找。是否存在每分钟向窗口发送一次通知或消息的对象?如果没有,我有没有具体的方法来完成这个任务,或者建议我从哪里开始寻找


编辑:是否可以计算当前日期和未来日期之间的秒数,并创建一个单独的倒计时线程(使用计时器)?

以下是接收计时器事件所需实现的功能的大致示意图:

UINT_PTR timerId = NULL;

void OnTimerEvent(HWND, UINT, UINT_PTR id, DWORD)
{
    if (timerId == id)
    {
        // timer action...
    }
}

void StartTimer()
{
    // call OnTimerEvent after 1000 milliseconds
    timerId = SetTimer(NULL, NULL, 1000, &OnTimerEvent);
}

void StopTimer()
{
    KillTimer(NULL, timerId);
}

下面是接收计时器事件所需实现的功能的大致示意图:

UINT_PTR timerId = NULL;

void OnTimerEvent(HWND, UINT, UINT_PTR id, DWORD)
{
    if (timerId == id)
    {
        // timer action...
    }
}

void StartTimer()
{
    // call OnTimerEvent after 1000 milliseconds
    timerId = SetTimer(NULL, NULL, 1000, &OnTimerEvent);
}

void StopTimer()
{
    KillTimer(NULL, timerId);
}

您可以按照@StackedCrooked的建议使用
SetTimer
。但如果系统时间改变,这将不起作用。例如,当前时间是12:30,您将其设置为12:35,因此您将设置的
SetTimer
将持续5分钟。但是,如果系统时间更改为12:32,计时器将在12:37左右触发,而不是在12:35


为此,您可能需要使用。

您可以使用@StackedCrooked建议的
SetTimer
。但如果系统时间改变,这将不起作用。例如,当前时间是12:30,您将其设置为12:35,因此您将设置的
SetTimer
将持续5分钟。但是,如果系统时间更改为12:32,计时器将在12:37左右触发,而不是在12:35


为此,您可能希望使用。

我目前正在研究相互关联的WM_TIMECHANGE和onttimechange()函数。对它们进行了测试,但它们的工作方式与您想象的不同。正如在中一样,我已经为WM_TIMECHANGE发送的时间设置了断点,并且它从未被发送,即使时间发生了变化。编辑:原来它只在应用程序更改时间时发送。WM_TIMECHANGE在您更改系统时间时引发。它不适用于计时器。我目前正在研究相互关联的WM_TIMECHANGE和OnTimeChange()函数。对它们进行了测试,但它们的工作方式与您想象的不同。正如在中一样,我已经为WM_TIMECHANGE发送的时间设置了断点,并且它从未被发送,即使时间发生了变化。编辑:原来它只在应用程序更改时间时发送。WM_TIMECHANGE在您更改系统时间时引发。这不是给计时员的。我想出了一个半工作的解决方案。我设置了一个每秒钟响一次的计时器。每隔一秒钟,使用OnTimer函数,我根据从用户那里得到的时间检查当前时间。如果它们匹配,我会弹出一个消息框。如果他们不这样做,我什么也不做。当我完成应用程序并且它完成了它应该做的事情时,语法就会出现。这是一个糟糕的解决方案,你在浪费“计时器”资源!请解释一下?如果可能的话,提供一个替代方案。这是可行的,我已经继续前进,但如果有更好的方法,我会接受。我已经想出了一个半可行的解决方案。我设置了一个每秒钟响一次的计时器。每隔一秒钟,使用OnTimer函数,我根据从用户那里得到的时间检查当前时间。如果它们匹配,我会弹出一个消息框。如果他们不这样做,我什么也不做。当我完成应用程序并且它完成了它应该做的事情时,语法就会出现。这是一个糟糕的解决方案,你在浪费“计时器”资源!请解释一下?如果可能的话,提供一个替代方案。这是有效的,我已经继续前进,但如果有更好的方法,我会接受。