要登录用户,我在以下课程中有一个方法class ProbeConnection : public QObject, QRunnable
。
该登录方法称为QRunnable类的预期运行方式。
void ProbeConnection::run(QString username, QString password, QString ipAddress, bool fts, bool tts, bool pcap, bool events, bool os_meas)
该方法需要在其他线程中运行,因为它在无响应时会阻塞gui(该方法用于登录)。
我试图通过运行以下命令使其与QtConcurrent
一起运行:
QFuture<void> future = QtConcurrent::run(this->run(username, password, ipAddress, fts, tts, pcap, events, os_meas));
但是我收到的消息是:
没有匹配功能可调用“运行”
当带有参数时如何启动run方法?
答案 0 :(得分:0)
使用成员函数调用QtConncurrent::run
时,您需要正确的QtConncurrent::run
语法,如this thread所示
如Multi-threading Technologies in Qt中突出显示;当您想重用 QThreadPool 中的现有线程时,将使用QRunnable
,另一方面,QtConcurrent
通常将用于其高级API,并返回一个QFuture对象从线程检索结果。
要使用QRunnable::run
,请在子类中重新实现它,然后使用QThreadPool::start()
将QRunnable
放入QThreadPool的运行队列中...而不是调用QtConcurrent::run
在您的代码中,ProbeConnection::run
和QFuture<void>
均为void
..我认为没有理由使用QtConcurrent
..或直接使用没有{{1 }}。