0

私は Qt で QThreads を使用しており、ワーカーでシグナルを作成しているため、unsigned char buf[10]にプロットされるを返すことができgui threadます。これが私の信号です。

unsigned char Worker::newinfo(unsigned char buf[10])
{
    return buf;
}

ここで何が問題なのですか?

buf が受信される私の関数では、信号を送信して、GUI スロットでキャッチできるようにします。

emit newinfo(buf);

connect(worker, SIGNAL(newinfo(unsigned char[])), this, SLOT(process_new_info(unsigned char[])));

の複数の定義があることを教えてくれますnewinfo()

ここに私のワーカークラスがあります:

class Worker : public QObject
{
    Q_OBJECT

public:
    Worker(FILE *datafile, int sockint, int bitsint);
    ~Worker();

    FILE *data;
    int sock;
    int bits;

public slots:
    void doWork();

signals:
    void finished();
    unsigned char newinfo(unsigned char buf[10]);

private:

};
4

2 に答える 2

2

それはまったく意味がありません。std::vector<unsigned char>またはに変更すると、問題は解決しますQByteArray

于 2013-03-07T14:54:32.123 に答える
2

moc_gui.cpp:110: multiple definition of Worker::newinfo(unsigned char*)' gui.cpp:64: first defined here

シグナルは、プログラマーによって明示的に定義されるのではなく、モックによって定義されることを意図しています。また、シグナルまたはスロットを定義するときは、それらを無効にする必要があります。

QtConcurrent::run() (非同期実行用) とQFutureWatcher (結果への非同期アクセス用)の組み合わせで、あなたがやりたいことを達成できるようです。SOで調べてください。たくさんの投稿があります。

編集: まず、return buf[10];上記のコードでは、要素があると言ったように意味をなさない buf の 11 番目の要素を返します10。第二に、他のすべてが正しいと仮定すると、信号でポインターを送信すると、欠陥の原因になります。両方のスレッドが同時に同じデータにアクセスするか、有効でないデータ バッファーに GUI がアクセスしようとする可能性があります。またypnos、スレッド間で安全に転送できるオブジェクトを渡すことで、この特定の問題を回避できます。

于 2013-03-07T15:08:09.263 に答える