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++ 使用多个线程写入一个QProcess_C++_Multithreading_Qt - Fatal编程技术网

C++ 使用多个线程写入一个QProcess

C++ 使用多个线程写入一个QProcess,c++,multithreading,qt,C++,Multithreading,Qt,我有一个简单的程序,它必须与几个输入线程一起工作,我想写一个简单的Qt程序来测试它。 因此,我使用以下代码启动QProcess: QProcess *proc = new QProcess; proc->start("D:\\compile\\referee_system\\referee_system"); if(!proc->waitForStarted()) { qDebug() << "failed to start process"; retur

我有一个简单的程序,它必须与几个输入线程一起工作,我想写一个简单的Qt程序来测试它。 因此,我使用以下代码启动QProcess:

QProcess *proc = new QProcess;
proc->start("D:\\compile\\referee_system\\referee_system");
if(!proc->waitForStarted()) {
    qDebug() << "failed to start process";
    return;
}

通过信号和插槽将每个线程的数据发送到QProcess并写入数据。不要使用waitForReadyRead,而应该是信号您遇到了什么问题?这看起来更应该测试您的Qt程序,而不是通过QProcess运行的程序,因为如果您正确地将输入同步到Qt端的stdin,它将看不到多个线程中的任何内容。从每个线程发送数据,通过信号和插槽发送到QProcess并写入数据。不要使用waitForReadyRead,而应该是信号您遇到了什么问题?这看起来更像是测试您的Qt程序,而不是通过QProcess运行的程序,因为如果您正确地将输入同步到Qt端的stdin,它将看不到多个线程中的任何内容。
proc->write(reinterpret_cast<char*>(&s), sizeof(DataStruct));
proc->waitForReadyRead();
QByteArray a = proc->readAll();
void writeData(QProcess *p) {
    qDebug() << "writing data";
    DataStruct s;
    s.id = qrand()%2;
    s.type = START;
    for(int i = 0; i < 10; ++i)
        s.data[i] = qrand()%128;

    p->write(reinterpret_cast<char*>(&s), sizeof(DataStruct));
    p->waitForBytesWritten();
    p->waitForReadyRead();

    QByteArray a = p->readAll();

    qDebug() << a;
}
QVector<QFuture<void> > vec;

for(int i = 0; i < c_thread_count; ++i) {
    QFuture<void> f = QtConcurrent::run(writeData, proc);
    vec << f;
}

for(int i = 0; i < c_thread_count; ++i) {
    vec[i].waitForFinished();
}
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x1549d248), parent's thread is QThread(0x13d13148), current thread is QThread(0x154dbd90)