- блокирует мой qt интерфейс. Скажите, пожалуйста, как мне запускать этот метод чтобы не блокировать интерфейс или какой аналогичный метод использовать в boost/qt?
std::thread applyThread([&, wta]() {
CreateProcessWithLogonW
});
applyThread.join();
Я запускаю этот метод в отдельном потоке, но все равно интерфейс qt замораживается, спасибо
Потому что ты ждешь окончания потока. Вообще лучше использовать QProcess
ну так все правильно, ты запустил поток и блокируешь основной, пока он не завершится
Если я запихну в QtProcess то поток не будет блокироваться ?
если сделаешь join, основной поток так же остановится на этой строчке
А мне надо на фон отправить процесс и запустить его. А после завершения вывести сообщение. Как без join это сделать. Просто убрать эту строчку ?
это уже другая проблема. Сейчас у тебя не асинхронный код, ты конечно ещё один поток сделал, но тут же начинаешь ждать его завершения. Считай while(поток закончился){}
boost::asio::io_context ioContext; Acceptor acceptor(ioContext, fingerprint.proxy, LOCAL_PORT); std::thread applyThread([&, wta]() { qDebug() << fingerprint.applyFingerprint(lastBrowser, wta); }); ioContext.run(); applyThread.join(); Мой код сейчас выглядит так и методы ioContext.run(); applyThread.join(); блокируют основной поток В идеале должны не блокировать и ioContext должен завершаться сразу после завершения applyThread Вот чего в идеале я хочу добиться
тебе нужно посмотреть на потоки qt. Должен быть какой-то способ сигналами обмазаться
QTimer *threadTimer = new QTimer(this); threadTimer->setTimeout(50); connect(threadTimer, &QTimer::timeout, this, [this, threadTimer, &applyThread]() { if (applyThread.joinable()) { emit threadFinishedItsWork(); threadTimer->stop; } }); threadTimer->start();
Обсуждают сегодня