[英]Send data from worker thread to gui thread in Qt
如何將unsigned char buf[10]
數組從worker函數發送到gui線程(主線程)。
我試圖創建一個信號/插槽機制,其中插槽在函數的參數中具有buf以在gui線程中處理它。
更新:
這是我到目前為止:
工人階級:
class Worker : public QObject
{
Q_OBJECT
public:
Worker(FILE *datafile, int sockint, int bitsint);
~Worker();
int channels_buf[10];
FILE *data;
int sock;
int bits;
public slots:
void doWork();
signals:
void finished();
void newinfo(unsigned char buf[10]);
private:
};
工人建設者
// Worker thread
Worker::Worker(FILE *datafile, int sockint, int bitsint)
:data(datafile)
,sock(sockint)
,bits(bitsint)
{
}
Worker::~Worker()
{
}
線程的功能
// Worker functions
void Worker::doWork()
{
unsigned char buf[10];
unsigned char crcval;
memset (buf, 0, 10);
while(1)
{
int i;
int numb;
numb = 0;
numb = recv (sock, buf, 10, MSG_WAITALL);
crcval = BP_CRC8 (buf, 9);
// 8 bits
if (bits == 0)
{
if (crcval == buf[9])
{
emit newinfo(buf);
}
}
}
emit finished();
}
然后我開始了線程
Worker *worker;
QThread *workerThread;
worker = new Worker(data, sock, bits);
workerThread = new QThread(this);
connect(workerThread, SIGNAL(started()), worker, SLOT(doWork()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(worker, SIGNAL(newinfo(unsigned char[])), this, SLOT(process_new_info(unsigned char[])));
worker->moveToThread(workerThread);
workerThread->start();
這是gui線程中的函數,它應該處理來自worker的unsigned char buf[10]
。
void gui::process_new_info(unsigned char buf[10])
{
int v = 0;
printf ("%d ->", buf[0]);
fprintf (data, "%d,", buf[0]);
for (int i = 1; i < 9; i++)
{
v = buf[i];
printf ("%d,", v);
fprintf (data, "%d,", v);
}
printf ("\n");
fprintf (data, "\n");
}
建立連接的正確方法是:
connect( worker, SIGNAL(newinfo(unsigned char[10])), this, SLOT(process_new_info(unsigned char[10])) );
但是,您將遇到要嘗試建立排隊連接的問題,並且Qt不知道如何處理該類型的排隊。 有很多方法,但您會發現將數據放入容器(如QByteArray
或QVector
而不是原始數組)要容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.