我有一个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没有问题)。但是,我觉得我错了。有没有人对所描述的行为有解释? 如果还需要其他任何细节,只需要求它们,我会尝试提供它们。
此致 罗伯特
答案 0 :(得分:0)
如果库是同步的并且没有将控制流返回到事件循环,则它会一直处于忙碌状态并且无法调用插槽。您需要创建一个线程并在该线程中执行同步操作。