我正在构建一个应用程序,其中请求来自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中的某些东西可以让我轻松地做到这一点。
我应该怎么做?
答案 0 :(得分:1)
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 << "timeout\n";
}
else
{
std::cout << "result: " << task.get() << "\n";
}
}
请注意,即使超时后任务仍将继续执行,因此,如果您想在任务完成前取消任务,则需要传递某种标记变量。