如果之前有人询问过,我很抱歉,但我没有找到与此有关的任何内容。这是我的理解。这不是家庭作业。 我想只在一段时间内执行一个函数。我怎么做?例如,
main()
{
....
....
func();
.....
.....
}
function func()
{
......
......
}
这里,我的main函数调用另一个函数。我希望该功能只执行一分钟。在该功能中,我将从用户那里获取一些数据。因此,如果用户没有输入数据,我不希望永远陷入该功能。因此,无论函数是在那时完成还是未完成,我都想回到main函数并执行下一步操作。
有什么办法吗?我在Windows 7上,我正在使用VS-2013。
答案 0 :(得分:0)
在Windows下,选项有限。
最简单的选择是func()
明确地并定期检查它执行的时间(例如存储其开始时间,定期检查自该开始时间以来经过的时间)并返回它是否已经消失比你希望的更长。
可以(C ++ 11或更高版本)在另一个线程内执行该函数,并且main()
可以在所需的时间段过去时发出该线程的信号。这是最好的合作。例如,main()
设置一个标志,线程函数检查该标志并在需要时退出。这样的标志通常最好受到临界区或互斥体的保护。
Windows下的极不安全方式是main()
强制终止线程。这是不安全的,因为它可能使程序(并且在最坏的情况下,操作系统本身)处于不可靠的状态(例如,如果终止的线程正在分配内存的过程中,如果它正在执行某些内核函数,则操纵全局共享DLL的状态。)
如果您想要更好/更安全的选项,您将需要一个具有严格内存和时序分区的实时操作系统。到目前为止,我还没有遇到任何有关这些特性的Windows和unix(甚至是实时变体)变体的任何经证实的文档。有几个类似unix的系统(例如LynxOS),其中包含具有此类属性的变体。
答案 1 :(得分:0)
我认为使用多线程和带秒表的循环可以满足您的一部分需求。
我不确定这个想法的可行性,只是分享了我的想法。我对c ++知之甚少,但在Node.js中你可以使用'events'来实现。也许这些东西也存在于C ++中。