gpt4 book ai didi

c++ - 如何在qt/c++中集成Threading

转载 作者:行者123 更新时间:2023-11-28 02:27:19 25 4
gpt4 key购买 nike

我目前正在构建一个类似浏览器的应用程序。一部分是 UI,另一部分是对 Android 设备的访问

我有一个 DeviceMngr 类,用于实例化访问 android 设备的不同方法。实例化类作为参数提供给 QMainWindow。 QMainWindow 将显示一个 QTreewidget 并使用 MyMtpDevice 从 android 设备获取数据。

DeviceMngr *MyMtpDevice = new DeviceMngr;
error = MyMtpDevice->OpenDevice();
MainUI MyWindow(*MyMtpDevice);

如何创建一个线程,其中对 DeviceMngr(如 OpenDevice)的所有调用都在单独的线程中完成,而对此类方法的任何其他调用都在该线程中完成。

我想要一个用于 UI 的线程和一个用于 DeviceMngr 的线程

有实现的想法吗?我尝试了一些但似乎不起作用

最佳答案

这完全取决于您的需要。您可以做几件事,您应该查看的解决方案之一是 boost::thread and 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 synchronisation

关于c++ - 如何在qt/c++中集成Threading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090619/

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