我正在编写一个 HTTP 服务器。我写了以下内容并且效果很好:
boost::asio::io_context io_context;
tcp::acceptor acceptor(io_context, ...);
acceptor.async_accept(...);
auto server_thread = std::jthread([] { io_context.run(); });
// How do I ensure the server is ready? (before calling sendHTTPRequests)
sendHTTPRequests();
我想立即开始发送 HTTP 请求。有没有办法确保服务器已经启动并运行?
你总是可以等待。
代码草图(未经测试...):
struct Sync
{
std::mutex mutex;
std:condition_variable condition;
bool ready=false;
};
auto sync=std::make_shared<Sync>();
io_context.post([sync]() {
{
std::lock_guard<decltype(sync->mutex)> lock(sync->mutex);
sync->ready=true;
}
sync->condition.notify_all();
});
// Finally, a line from your code :-)
auto server_thread = std::jthread([] { io_context.run(); });
{
std::unique_lock<decltype(sync->mutex)> lock(sync->mutex);
sync->condition.wait(lock, [sync]() { return sync->ready; } );
}
sync.reset(); // or just let it drop out of scope