我正在构建一个应用程序,其中请求来自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::async
,std::promise
或std::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";
}
}
请注意,即使在超时后,任务也会继续执行,因此如果要在任务完成之前取消任务,则需要传入某种标志变量。