如何在QT/C 中集成线程
How to integrate Threading in qt/c++
我目前正在构建一个应用程序浏览器。一个部分是UI,另一部分是对Android设备的访问
我有一个类devicemngr,用于实例化不同的方法以访问Android设备。实例化类是qmainwindow的参数。QMainWindow将显示QTREEWIDGET,并使用MyMtpDevice从Android设备获取数据。
DeviceMngr *MyMtpDevice = new DeviceMngr;
error = MyMtpDevice->OpenDevice();
MainUI MyWindow(*MyMtpDevice);
如何创建一个线程,其中所有调用devicemngr(例如opendevice)都是在单独的线程中完成的,并且对此类方法的任何其他调用。
我想要一个UI的线程和Deviclenggr的线程
实施的想法吗?我尝试了一些,但似乎不起作用
这完全取决于您的需求。您可以做几件事,应该看的解决方案之一是boost::thread
和boost::io_service
。它通过创建线程(在您的DeviceMngr
类中)并将作品发布到它(来自其他线程)来起作用:
class DeviceMngr
{
public:
DeviceMngr();
~DeviceMngr();
void OpenDevice();
private:
void DeviceMngrThread();
void _OpenDevice() {}
boost::asio::io_service io_service;
boost::thread thread;
bool run;
};
DeviceMngr::DeviceMngr()
: io_service(),
thread(&DeviceMngr::DeviceMngrThread, this), // create thread
run(true) // start running thread
{
}
DeviceMngr::~DeviceMngr()
{
run = false; // stop running the thread
thread.join(); // wait for the thread to finish
io_service.stop();
}
void DeviceMngr::DeviceMngrThread()
{
while (run)
{
// Process work
io_service.run();
// Prepare for more work
io_service.reset();
}
}
void DeviceMngr::OpenDevice()
{
// Post work to do
io_service.post(boost::bind(&DeviceMngr::_OpenDevice, this));
}
调用OpenDevice
将简单地发布工作DeviceMngr
线程的工作。这个简单的示例应该帮助您开始并了解线程的工作原理。我建议从较小的示例开始,以便您可以学习所有这些工作方式(看到OpenDevice
的呼叫不会同步。如果您需要同步,则可能需要求助于Boost Synchronization
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++uWebSockets将事件循环集成到一个线程中
- 如何在QT/C 中集成线程