C/C+中的延迟函数调用+; 如何在一段时间内或在特定的时间内调用C++中的函数? 我在谷歌和Stackoverflow中搜索。我只找到了通过SIGALARM处理程序执行此操作的方法。 更新1: 另外,我使用Linux。 P.P.S.我还没有任何编写的代码,因为我想知道如何在编写之前做到这一点。尝试使用计时器。或者在linux中使用epoll。还有Windows中的waitforsingleobject。

C/C+中的延迟函数调用+; 如何在一段时间内或在特定的时间内调用C++中的函数? 我在谷歌和Stackoverflow中搜索。我只找到了通过SIGALARM处理程序执行此操作的方法。 更新1: 另外,我使用Linux。 P.P.S.我还没有任何编写的代码,因为我想知道如何在编写之前做到这一点。尝试使用计时器。或者在linux中使用epoll。还有Windows中的waitforsingleobject。,c++,function,time,call,C++,Function,Time,Call,尝试使用计时器。或者在linux中使用epoll。以及类似Windows中waitforsingleobject的内容。如果您可以访问Boost库,请尝试回答这个问题。您可以定期或一次性调用函数。如果您可以访问Boost库,请尝试回答这个问题。您可以定期调用函数,也可以一次性调用。您可能希望在另一个一次性线程中这样做,因为在主线程中等待会阻塞您的应用程序。您可以使用std::this\u thread::sleep\u for在该线程中添加延迟 即 您可能希望在另一个一次性线程中执行此操作,因为

尝试使用计时器。或者在linux中使用epoll。以及类似Windows中waitforsingleobject的内容。

如果您可以访问Boost库,请尝试回答这个问题。您可以定期或一次性调用函数。

如果您可以访问Boost库,请尝试回答这个问题。您可以定期调用函数,也可以一次性调用。

您可能希望在另一个一次性线程中这样做,因为在主线程中等待会阻塞您的应用程序。您可以使用
std::this\u thread::sleep\u for
在该线程中添加延迟


您可能希望在另一个一次性线程中执行此操作,因为在主线程中等待会阻止您的应用程序。您可以使用
std::this\u thread::sleep\u for
在该线程中添加延迟


POSIX在C中实现这一点的方法是通过使用sigallarm设置信号处理程序,并在其中包含您想要调用的函数。在这种情况下,你让操作系统(某种程度上)负责在时机成熟时给你打电话

C++11的实现方法是通过std::thread和std::chrono。一个非常简单但可能不完整的示例:

std::chrono::milliseconds duration( 2000 );
auto deferred_task = [duration] () { std::this_thread::sleep_for(duration); call_task(); }
std::thread t(deferred_task);
在这个简单的示例中,您的程序是多线程的,一个线程负责进行延迟调用(在另一个线程中)。您可能希望以同步或异步的方式加入、捕获返回值以及任何您想要的内容


您想要一个多线程应用程序,还是需要一个单线程信号C行为?这是非常关键的,从这里开始,它将成为您代码风格的主要约束。

POSIX在C中实现这一点的方法是使用sigallarm设置一个信号处理程序,并在其中包含您想要调用的函数。在这种情况下,你让操作系统(某种程度上)负责在时机成熟时给你打电话

C++11的实现方法是通过std::thread和std::chrono。一个非常简单但可能不完整的示例:

std::chrono::milliseconds duration( 2000 );
auto deferred_task = [duration] () { std::this_thread::sleep_for(duration); call_task(); }
std::thread t(deferred_task);
在这个简单的示例中,您的程序是多线程的,一个线程负责进行延迟调用(在另一个线程中)。您可能希望以同步或异步的方式加入、捕获返回值以及任何您想要的内容


您想要一个多线程应用程序,还是需要一个单线程信号C行为?这是非常关键的,它将是您在这里对代码样式的主要限制。

您实际上可以用一种非常简单的方式来完成:

void example(void (*f)()) {
  struct defer {
    void (*f)();
    ~defer() { f(); }
  } _[[maybe_unused]] { f };
}

实际上,您可以用一种非常简单的方式来完成:

void example(void (*f)()) {
  struct defer {
    void (*f)();
    ~defer() { f(); }
  } _[[maybe_unused]] { f };
}

我已经更新了我的问题。你可以用
goto
s来做,但它会让代码看起来像意大利面条,有时更难理解。(我假设你想在函数返回之前做些什么)我更新了我的问题。你可以用
goto
s来做,但它会让代码看起来像意大利面条,有时更难理解。(我假设你想在函数返回之前做点什么)