work()、require() 和 make_work_guard() 之间的 Asio 区别

Asio difference between work(), require() and make_work_guard()

抱歉打扰,我是 C++ 和 Asio 的新手...

我刚从这里过来

我正在尝试为我的 io_context 制作一个“虚拟作品”。

对于只想做一个简单的“UDP socket”的初学者来说,真是一头雾水。

Packt 和 Youtube 的古书 (https://www.youtube.com/watch?v=2hNdkYInj4g&t=2292s) 教程告诉我使用“work()”,旧文档告诉我使用更复杂的 class 称为“excutor_work_guard”,而新的时尚文件只是告诉我使用一些极其不可读的东西“require()”...

我可以只使用“make_work_guard()”而忘记其他一切吗?

对不起我的英语...

如您所说,这是链接问题的完整副本。

那里的答案回答了你在这里提出的每一个观点。

The ancient book from Packt and Youtube (https://www.youtube.com/watch?v=2hNdkYInj4g&t=2292s) tutorial tells me to use "work()"

我对 Asio 上的 Packt 书籍有不好的体验¹。无论如何,从来没有函数 work()。你可能是说

boost::asio::io_service svc;
boost::asio::io_service::work work(svc);

确实是更新的界面

boost::asio::io_context ioc;
auto work = make_work_guard(ioc);

就是这样。

and the new fashion document just tell me to use something extremely unreadable "require()"...

我从来没有(曾经)在任何地方看到过。你能告诉我你找到那个的地方吗?事实上,正如链接的答案所指出的那样,将工作与执行者联系起来可能不是一个好主意,因为它通过复制、失去控制和引发死锁来传播。

Could I just use "make_work_guard()" and forget about everything else?

是的。这就是另一个答案已经说过的。如果您有疑问,只需 re-read 那里的摘要 :)


¹ 例如见 Crash : terminate called after throwing an instance of 'std::system_error' what(): Resource deadlock avoided