gpt4 book ai didi

c++ - 安全跨线程信号/槽 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:49 25 4
gpt4 key购买 nike

似乎为 Signal 类和插槽中调用的内容提供安全跨线程信号的唯一实现是 QT。 (也许我错了?)。

但是我不能在我做的项目中使用QT。那么我怎样才能从不同的线程(例如使用 Boost::signals2)提供安全的 Slots 调用呢?插槽内的互斥锁是唯一的方法吗?我认为 signals2 会保护自己,但不会保护槽内正在做的事情。

谢谢

最佳答案

您可以结合使用 boost::bind 和 boost ASIO 来创建跨线程调用。

# In Thread 2
boost::asio::io_service service;
boost::asio::io_service::work work (service); // so io service won't stop if there is no work
service.run() # starting work thread

# In Thread 1
service.post (boost::bind (&YourClass::function, &yourClassInstance, parameter1, parameter2))

线程 2 将进入循环并执行您的绑定(bind)函数。我认为您也可以将 Boost::Signals2 调用调用到此循环中。

但请注意:如果您进行跨线程信号传输,请确保目标对象在被调用时仍然存在。您可以通过删除目标析构函数中的所有连接来保证这一点(而不是在它们的基类析构函数中,另请参阅 Signals-Trackable Class)

我不太喜欢 Boost::Signals2 oo,因为它的堆栈跟踪和编译时间非常长 (blog post)。

关于c++ - 安全跨线程信号/槽 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com