C++ - 实现JS的setTimeout的现代方法



我正在构建一个应用程序,其中请求来自zeromq套接字。对于每个请求,我想进行一些处理并发送响应,但是如果经过预定义的时间,我想立即发送响应。

在node.js中,我会做这样的事情:

async function onRequest(req, sendResponse) {
let done = false;
setTimeout(() => {
if (!done) {
done = true;
sendResponse('TIMED_OUT');
}
}, 10000);
await doSomeWork(req); // do some async work
if (!done) {
done = true;
sendResponse('Work done');
}
}

我现在唯一坚持的事情是设置 c++ 中的超时。在 c++ 方面没有太多经验,但我知道 c++11 中有一些东西可以让我干净利落地做到这一点。

我应该怎么做?

std::future

是您要查找的,这可以与std::asyncstd::promisestd::packaged_task一起使用。一个带有std::async的示例:

#include <iostream>
#include <string>
#include <future>
#include <thread>
int main()
{
std::future< int > task = std::async(std::launch::async, []{ std::this_thread::sleep_for(std::chrono::seconds(5)); return 5; } );
if (std::future_status::ready != task.wait_for(std::chrono::seconds(4)))
{
std::cout << "timeoutn";
}
else
{
std::cout << "result: " << task.get() << "n";
}
}

请注意,即使在超时后,任务也会继续执行,因此如果要在任务完成之前取消任务,则需要传入某种标志变量。

相关内容

  • 没有找到相关文章

最新更新