Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt中的信号/插槽机制中返回一个无符号字符_C++_Multithreading_Qt_Signals Slots - Fatal编程技术网

C++ 在Qt中的信号/插槽机制中返回一个无符号字符

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[

我在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[])), 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]返回buf的第11个元素,这没有意义,因为您说您有
10个
元素。其次,假设其他一切都是正确的,在信号中传输指针是缺陷的来源。两个线程可以同时访问相同的数据,或者GUI可以在数据缓冲区无效时尝试访问数据缓冲区。作为
ypnos
,您可以通过传递可以在线程之间安全传输的对象来避免这个特殊问题。

moc_gui.cpp:110:Worker的多重定义::newinfo(unsigned char*)”gui.cpp:64:首先在这里定义

信号不是由程序员明确定义的,而是由主运行中心明确定义的。当您定义信号或插槽时,它们需要是空的

看起来您想要做的事情可以通过(异步执行)和(异步访问结果)的组合来实现。查一下,有很多帖子

编辑:
首先
返回buf[10]返回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)
时为信号提供的参数将作为参数传递给连接的插槽。你不需要归还任何东西。