我正在研究如何将 Futures 与非阻塞事件驱动代码一起使用(是否在单独的线程中,两者都在)但是我如何从一个插槽结束未来(〜基于信号解决承诺)?
QByteArray RfidCardReader::startTask(QByteArray send)
{
if(this->busy==false) {
this->sendFrame(send);
QObject::connect(this, &RfidCardReader::frameReady,
[=]() {/*this must be the startTask return*/ return this->int_read_buffer;});
} else {
throw 0;//Handle a queue instead
}
}
QFuture<QByteArray> RfidCardReader::send(QByteArray passed_send)
{
return QtConcurrent::run(QThreadPool::globalInstance(), this->startTask, passed_send);
}
基本上,我只想使用一个实例将串行设备(本质上是同步的)包装在 Futures 队列中,但只有使用 &QIODevice::bytesWritten &QIODevice::readyRead 等信号的非阻塞代码......如果有更好的解决问题的方法让我知道,我很高兴知道在 Qt 中编写可读异步代码而不阻塞单独线程的正确方法