执行功能一段时间

时间:2016-02-22 10:09:26

标签: c++ windows winapi visual-studio-2013

如果之前有人询问过,我很抱歉,但我没有找到与此有关的任何内容。这是我的理解。这不是家庭作业。 我想只在一段时间内执行一个函数。我怎么做?例如,

main()
{
    ....
    ....
    func();
    .....
    .....
}

function func()
{
    ......
    ......
}

这里,我的main函数调用另一个函数。我希望该功能只执行一分钟。在该功能中,我将从用户那里获取一些数据。因此,如果用户没有输入数据,我不希望永远陷入该功能。因此,无论函数是在那时完成还是未完成,我都想回到main函数并执行下一步操作。

有什么办法吗?我在Windows 7上,我正在使用VS-2013。

2 个答案:

答案 0 :(得分:0)

在Windows下,选项有限。

最简单的选择是func()明确地并定期检查它执行的时间(例如存储其开始时间,定期检查自该开始时间以来经过的时间)并返回它是否已经消失比你希望的更长。

可以(C ++ 11或更高版本)在另一个线程内执行该函数,并且main()可以在所需的时间段过去时发出该线程的信号。这是最好的合作。例如,main()设置一个标志,线程函数检查该标志并在需要时退出。这样的标志通常最好受到临界区或互斥体的保护。

Windows下的极不安全方式是main()强制终止线程。这是不安全的,因为它可能使程序(并且在最坏的情况下,操作系统本身)处于不可靠的状态(例如,如果终止的线程正在分配内存的过程中,如果它正在执行某些内核函数,则操纵全局共享DLL的状态。)

如果您想要更好/更安全的选项,您将需要一个具有严格内存和时序分区的实时操作系统。到目前为止,我还没有遇到任何有关这些特性的Windows和unix(甚至是实时变体)变体的任何经证实的文档。有几个类似unix的系统(例如LynxOS),其中包含具有此类属性的变体。

答案 1 :(得分:0)

我认为使用多线程和带秒表的循环可以满足您的一部分需求。

  1. 创建新主题。
  2. 启动秒表。
  3. 以一分钟开始循环作为循环的条件。
  4. 在每次迭代期间,检查用户是否输入了输入并进行处理。
  5. 当一分钟结束时,循环退出。
  6. 我不确定这个想法的可行性,只是分享了我的想法。我对c ++知之甚少,但在Node.js中你可以使用'events'来实现。也许这些东西也存在于C ++中。