在两个线程之间共享 QAxObject?

Posted

技术标签:

【中文标题】在两个线程之间共享 QAxObject?【英文标题】:Share QAxObject between two threads? 【发布时间】:2013-04-10 11:49:29 【问题描述】:

假设一个对象 A 在线程中运行。它有一个指向 QAxObject 实例和对象 B 的指针。对象 B 有指向 QAxObject 的指针。

对象 A 创建一个线程并在其中移动对象 B。

#ifndef OBJECTA_H
#define OBJECTA_H

#include <QtCore/QObject>
#include <QtCore/QThread>
#include <QAxObject>

#include "ObjectB.h"

class ObjectA : public QObject

    Q_OBJECT
public:
    ObjectA(QObject *parent = 0) : QObject(parent)
    
        thread = new QThread();
        activeX = new QAxObject();
        objectB = new ObjectB(activeX);
        objectB->moveToThread(thread);

        ObjectA::connect(objectB, SIGNAL(someSignal()), this, SLOT(someSlot()));

        thread->start();
    

protected slots:
    void someSlot();

private:
    QThread *thread;
    QAxObject *activeX;
    ObjectB *objectB;
;

#endif // OBJECTA_H


#ifndef OBJECTB_H
#define OBJECTB_H

#include <QtCore/QObject>
#include <QAxObject>

class ObjectB : public QObject

    Q_OBJECT
public:
    ObjectB(QAxObject *axObject, QObject *parent = 0) : QObject(parent)
    
        activeX = axObject;
    

signals:
    void someSignal();

private:
    QAxObject *activeX;
;

#endif // OBJECTB_H

对象 B 能否与对象 A 共享的 QAxObject 一起工作?

我觉得这是不可能的。目前,我遇到了这个错误:QAxBase: Error calling IDispatch member NewProject: Unknown error

而且线程 A 和线程 B 都不能使用 QAxObject。

有这方面的信息吗?

【问题讨论】:

【参考方案1】:

解释如下:Access a COM object from a 3rd party dll across threads 。

应该使用:

CoInitialize(0);
CoInitializeEx(NULL, COINIT_MULTITHREADED);

【讨论】:

以上是关于在两个线程之间共享 QAxObject?的主要内容,如果未能解决你的问题,请参考以下文章

在两个线程之间共享一个 ArrayList?

在两个线程之间共享deadline_timer

如何在两个线程之间共享数据

两个线程之间的列表共享

不要同时在两个线程之间共享相同的套接字

在两个线程之间使用 LinkedBlockingQueue 是不是意味着我们不需要同步它们对共享数据的访问?