gpt4 book ai didi

c++ - 将数据从工作线程发送到 Qt 中的 gui 线程

转载 作者:太空狗 更新时间:2023-10-29 21:46:25 24 4
gpt4 key购买 nike

如何将辅助函数中的 unsigned char buf[10] 数组发送到 gui 线程(主线程)。

我试图创建一个信号/槽机制,其中槽在函数参数中有 buf,以便在 gui 线程中处理它。

更新:

这是我目前所拥有的:

worker 类(Class):

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 构造器

// 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 不知道如何处理该类型的排队。有很多方法可以解决这个问题,但您会发现将数据放入容器(例如 QByteArrayQVector)而不是原始数组要容易得多。

关于c++ - 将数据从工作线程发送到 Qt 中的 gui 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15276628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com