C++ 在Qt中的信号/插槽机制中返回一个无符号字符
我在Qt中使用QThreads,我在worker中创建一个信号,这样它就可以返回一个C++ 在Qt中的信号/插槽机制中返回一个无符号字符,c++,multithreading,qt,signals-slots,C++,Multithreading,Qt,Signals Slots,我在Qt中使用QThreads,我在worker中创建一个信号,这样它就可以返回一个无符号字符buf[10],并在gui线程中绘制。这是我的信号 unsigned char Worker::newinfo(unsigned char buf[10]) { return buf; } 这里怎么了 在接收buf的功能中,我会发出信号,以便在gui插槽中捕捉到: emit newinfo(buf); connect(worker, SIGNAL(newinfo(unsigned char[
无符号字符buf[10]
,并在gui线程中绘制。这是我的信号
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:
};
这根本没有道理。如果你改成std::vector
或根本没有意义的QByteArray
,你的问题就会消失。如果您更改为std::vector
或QByteArray
moc\u gui.cpp:110:Worker::newinfo(unsigned char*)gui的多定义。cpp:64:首先在这里定义
信号不是由程序员明确定义的,而是由主运行中心明确定义的。当您定义信号或插槽时,它们需要是空的
看起来您想要做的事情可以通过(异步执行)和(异步访问结果)的组合来实现。查一下,有很多帖子
编辑:
首先返回buf[10]上面代码中的code>返回buf的第11个元素,这没有意义,因为您说您有10个元素。其次,假设其他一切都是正确的,在信号中传输指针是缺陷的来源。两个线程可以同时访问相同的数据,或者GUI可以在数据缓冲区无效时尝试访问数据缓冲区。作为ypnos
,您可以通过传递可以在线程之间安全传输的对象来避免这个特殊问题。moc_gui.cpp:110:Worker的多重定义::newinfo(unsigned char*)”gui.cpp:64:首先在这里定义
信号不是由程序员明确定义的,而是由主运行中心明确定义的。当您定义信号或插槽时,它们需要是空的
看起来您想要做的事情可以通过(异步执行)和(异步访问结果)的组合来实现。查一下,有很多帖子
编辑:
首先返回buf[10]上面代码中的code>返回buf的第11个元素,这没有意义,因为您说您有10个元素。其次,假设其他一切都是正确的,在信号中传输指针是缺陷的来源。两个线程可以同时访问相同的数据,或者GUI可以在数据缓冲区无效时尝试访问数据缓冲区。作为ypnos
,您可以通过传递可以在线程之间安全传输的对象来避免这个特殊问题。从编译器得到的确切错误是什么?moc\u gui.cpp:110:Worker::newinfo(unsigned char*)的多定义“
gui.cpp:64:首先在此处定义”
您从编译器中得到的确切错误是什么?moc\u gui.cpp:110:工作者的多重定义::newinfo(unsigned char*)”
gui.cpp:64:首先在此处定义
我已运行线程。剩下的唯一部分是将信息移植到gui线程。信号的签名可能是void newinfo(QByteArray buff)代码>。然后用emit newinfo(mybuffer)
触发信号。mybuffer数组是否可以是无符号字符[10]
?是的,它将是仅返回buf
;信号在buf准备好传输后发出。调用emit newinfo(buf)
时为信号提供的参数将作为参数传递给连接的插槽。你不需要返回任何东西。我有线程在运行。剩下的唯一部分是将信息移植到gui线程。信号的签名可能是void newinfo(QByteArray buff)代码>。然后用emit newinfo(mybuffer)
触发信号。mybuffer数组是否可以是无符号字符[10]
?是的,它将是仅返回buf
;信号在buf准备好传输后发出。调用emit newinfo(buf)
时为信号提供的参数将作为参数传递给连接的插槽。你不需要归还任何东西。