этого всего использую QtConcurrent, выглядит это всё примерно следующим образом:
QFutureWatcher<bool> watcher(this);
connect(&watcher, &QFutureWatcher<bool>::finished, this, [&watcher, this]() { emit mySignal(watcher.result()); });
watcher.setFuture(QtConcurrent::run(&myFunc, ...);
Здесь не вызывается сигнал QFutureWatcher::finished, мне не понятно, почему это происходит. В текущей ситуации, метод завершается моментально, может это быть потому, что у QFuture вызывается сигнал finished до того, как она выставляется в QFutureWatcher?
Сигнал из другого потока должен посылаться асинхронно через очередь событий, поэтому connect должен обязательно отрабатывать, потому что он будет выполнен в коде обработки ДАННОГО события (сразу за конструктором), а сигнал поступит при обработке СЛЕДУЮЩЕГО события, после завершения выполнения ДАННОГО. А вот переменная watcher видимо у тебя локальная, и она будет уничтожена по окончании данной функции, и connect автоматом расконнектится, и это правильно, иначе было бы обращение к уже удалённому объекту.
Обсуждают сегодня