C++ 在一段时间内执行函数

C++ 在一段时间内执行函数,c++,windows,winapi,visual-studio-2013,C++,Windows,Winapi,Visual Studio 2013,如果之前有人问过我,我很抱歉,但是我没有找到任何与此相关的内容。这是为了我的理解。这不是家庭作业。 我只想执行一个函数一段时间。我该怎么做?比如说, main() { .... .... func(); ..... ..... } function func() { ...... ...... } 这里,我的主函数调用另一个函数。我希望该函数只执行一分钟。在这个函数中,我将从用户那里获取一些数据。所以,如果用户不输入数据,我不想永远停留

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

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

function func()
{
    ......
    ......
}
这里,我的主函数调用另一个函数。我希望该函数只执行一分钟。在这个函数中,我将从用户那里获取一些数据。所以,如果用户不输入数据,我不想永远停留在那个函数中。所以,无论函数在那个时候是否完成,我都想回到主函数并执行下一个操作


有什么办法吗?我使用的是windows 7,我使用的是VS-2013。

在windows下,选项有限

最简单的选项是
func()
显式地定期检查它执行了多长时间(例如,存储它的开始时间,定期检查自该开始时间以来经过的时间量),如果它超出了您的期望,则返回

(C++11或更高版本)可以在另一个线程中执行该函数,
main()
可以在所需的时间段结束时向该线程发出信号。这最好是合作完成的。例如,
main()
设置一个标志,线程函数检查该标志并在需要时退出。这样的标志通常由一个关键部分或互斥体进行最好的保护

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


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

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

  • 创建一个新线程
  • 启动秒表
  • 以一分钟作为循环的条件开始循环
  • 在每次迭代过程中,检查用户是否输入了输入和流程
  • 一分钟后,循环结束

  • 我不确定这个想法的可行性,只是分享了我的想法。我不太了解C++,但是在Node.js,你的要求可以用“事件”来实现。也可能是C++中存在的东西。

    我不知道一个纯标准的C++方式来做这件事,但是它可以使用操作系统的特性来完成。您在哪个平台上?我在Windows 7上,使用的是Visual Studio 2013。请回答您的问题以提供该信息并添加相关标记。对不起,我不能帮助你。不是纯C++方式,而是应该允许你确定一个套接字(在UNIX文件描述符,即键盘输入)上是否有信息可以读取而不阻塞。但在Windows上,它可能只用于网络内容…与Ok相关,谢谢。我没想到会这么复杂。是的,我确定。问题是,要支持您想要的东西,需要主机(操作)系统的非常特定的功能。哪些窗口没有。您可以使用一些功能,但必须专门设计程序(功能)以适当地使用它们。并且描述如何做到这一点在这种格式下是行不通的。感谢您的回复。我会等一天,如果我没有得到任何更满意的答案,我会把你的答案标记为接受。再次感谢!你不需要实时操作系统。在Windows上,只需使用,就可以了。这是安全的、单线程的,并且满足所有要求。异步I/O只解决了部分问题,不可检测。