C++ 使用多个线程写入一个QProcess
我有一个简单的程序,它必须与几个输入线程一起工作,我想写一个简单的Qt程序来测试它。 因此,我使用以下代码启动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
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)