首贴多包含
小弟尝试在多线程里加载和卸载插件,现在创建了
代码如下:
////////////////////////////////////////////主函数
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QPluginLoader>
#include "pluginthread.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread qthread;
qDebug()<<qthread.thread();
QList<PluginThread* > l_plugthread;
PluginThread *pluginthread;
for (int i=0; i<5; i++)
{
pluginthread = new PluginThread;
l_plugthread << pluginthread;
pluginthread->start();
}
return a.exec();
}
/////////////////////////////////////////////////线程类
#include "pluginthread.h"
#include "PlugInterface.h"
#include <QPluginLoader>
#include <QDebug>
PluginThread::PluginThread()
: QThread()
{
}
PluginThread::~PluginThread()
{
if(pluginLoader)delete pluginLoader;
if(timer)delete timer;
}
void PluginThread::run()
{
QPluginLoader *pluginLoader =new QPluginLoader("D:/T_practise/2012.05.11/003/RandomNum/PluginDll.dll");//"D:\\T_practise\\2012.05.11\\001\\RandomNum\\PluginDll.dll"
QObject *plugin = pluginLoader->instance();
if (plugin)
{
PlugInterface *plugObject = qobject_cast<PlugInterface *>(plugin);
plugObject->RandomNumber();
qDebug()<<"Load:"<<pluginLoader<< pluginLoader->thread()<< pluginLoader->isLoaded();
pluginLoader->unload();
qDebug()<<"UnLoad:"<<pluginLoader<< pluginLoader->thread() << pluginLoader->isLoaded();
}
else
{
qDebug() << "instance fail..";
}
exec();
}
发图看不见自己写结果大致的结果吧:
load: 线程1 插件1 ture
load: 线程2 插件2 ture
load: 线程3 插件3 ture
load: 线程4 插件4 ture
load: 线程5 插件5 ture
unload: 线程1 插件1 ture
unload: 线程2 插件2 ture
unload: 线程3 插件3 ture
unload: 线程4 插件4 ture
unload: 线程5 插件5 false
卸载每个线程的插件为什只有插件的isLoaded()返回值为真,其他都为假,出了什么问题!