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
抱歉打扰,我是 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