• 4590阅读
  • 1回复

[提问]多线程加载卸载插件问题 [复制链接]

上一主题 下一主题
离线tangqw
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-12
关键词: 多线程插件
         首贴多包含
  小弟尝试在线程里加载和卸载插件,现在创建了
代码如下:
////////////////////////////////////////////主函数
#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()返回值为真,其他都为假,出了什么问题

离线tangqw
只看该作者 1楼 发表于: 2012-05-12
怎么都没有反映啊,是我说得不明白吗?
快速回复
限100 字节
 
上一个 下一个