QAMQP icon indicating copy to clipboard operation
QAMQP copied to clipboard

How to use QAMQP not from main thread?

Open OlegJakushkin opened this issue 12 years ago • 1 comments
trafficstars

So I tried to modify test sample presented with lib to something like:

#include <QObject>
#include "qamqp/amqp.h"
#include "qamqp/amqp_exchange.h"
#include "qamqp/amqp_queue.h"
#include <QPointer>
#include <QThread>

#include <boost/thread.hpp>
#include <boost/bind.hpp>
#include <boost/date_time.hpp>
class OutThread : public QThread
{
    Q_OBJECT
protected:
    QPointer<QAMQP::Client> client_out;
    QPointer<QAMQP::Exchange> exchange_out;

    void run()
    {
        std::cout << "w1" << std::endl;

        QUrl con(QString("amqp://guest:guest@localhost:5672/"));
        client_out = new QAMQP::Client(this);
        client_out->open(con);
        exchange_out =  client_out->createExchange("test.test2");
        exchange_out->declare("fanout");

        QAMQP::Exchange::MessageProperties properties;
        properties[QAMQP::Frame::Content::cpDeliveryMode] = 2; // Make message persistent
        std::cout << "w2" << std::endl;

        while(1){
            exchange_out->publish("123 123 123", exchange_out->name(), properties);
            boost::this_thread::sleep(boost::posix_time::milliseconds(1));
        }
        std::cout << "w3" << std::endl;

        exec();
    }
};

class Test : public QObject
{
    Q_OBJECT

public:
    Test(){}
    ~Test(){}

    Q_INVOKABLE void test() {
        std::cout << "t1" << std::endl;

        OutThread oThread;
        oThread.start();
        //InThread iThread;
        //iThread.start();
        std::cout << "t2" << std::endl;

        oThread.wait(); 
        std::cout << "t3" << std::endl;

    };
};

yet it cannot create a connection from another thread and talls me:

t1
t2
w1
QObject::setParent: Cannot set parent, new parent is in a different thread
w2

How to fix QAMQP in order to support new threads?

OlegJakushkin avatar Dec 06 '12 20:12 OlegJakushkin

Because OutThread is in main thread but Test is in OutThread.

May be this link will be usefull: http://codethis.wordpress.com/2011/04/04/using-qthread-without-subclassing/ http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/ http://habrahabr.ru/post/150274/

fuCtor avatar Dec 07 '12 09:12 fuCtor