0

我有一个 QCoreApplication,它在启动期间加载不同的 QtPlugins,这些插件从各种来源获取数据。该数据通过注册的回调函数(每个插件相等)推送回我的 QCoreApplication。回调注册如下:

// m_manager is a class variable of the class registering the callback...
pluginInterface->registerCallback(std::bind(&Manager::handleData, std::ref(m_manager), _1));

现在我遇到了以下问题:在其中一个插件中,第三方库通过网络接收了数据。数据将与包含指向插件类的 this 指针的自定义结构一起推送到我的插件类的静态成员函数。当我在插件中接收数据时,我现在想通过注册的回调将其推送到我的 QCoreApplication 。此外,我想在回调函数中创建新对象(如 QTimer)。但是,当通过插件类的 this 指针从静态成员函数调用回调函数时,似乎没有运行事件循环。查看创建的 QTimer 对象的成员时,它的 QAbstractEventDispatcher 指针为 0。因此,QTimer 对象不能发出任何信号,这是我迫切需要的。

我认为通过插件类的 this 指针调用回调函数(QEventLoop 肯定正在运行,因为我可以使用插件内部的信号/插槽以及从插件的其他非静态成员函数到我的 QCoreApplication 没有问题)。不过,好像我错了。有人对所描述的行为有解释吗?如果需要任何其他详细信息,请询问他们,我会尽力提供。

问候,罗伯特

4

1 回答 1

0

如果库是同步的并且没有将控制流返回给事件循环,它会一直很忙并且不能调用槽。您需要创建一个线程并在该线程中执行同步操作。

于 2013-07-25T13:44:56.343 回答