Можно ли использовать QFuture без QtConcurrent?

У меня есть программа с QThread, который содержит сетевой клиент. Предполагается, что клиент должен взять объект, обработать его, загрузить его на сервер, получить ответ и отправить отчет в основной поток. Я сделал это с std::promiseи использовал его future, я сделал std::promise член объекта выбрасывается после взятия его будущего.

Минимальный пример кода следующий:

Объект, который я излучаю:

struct FileToUpload
{
std::string fileData;
std::string filename;
std::promise<int> promise;
}

Часть, которую я использую для излучения:

FileToUpload theFile;
auto uploadFuture = theFile.promise.get_future();
emit uploadFile(&theFile); //passing pointer because promise is non-copyable
auto uploadSuccess = uploadFuture.get();

Есть ли способ Qt сделать то же самое?

Я только нашел QFuture класс, который можно использовать с QtConcurrent. Я не смог найти ни одного примера, который объясняет, как использовать это с QThread, Какие у меня есть варианты сделать это с Qt правильно?

1

Решение

да, вы можете использовать QFuture без QConcurrent. Но API не документирован. Вы можете взглянуть на мою библиотеку-оболочку AsyncFuture по адресу:

https://github.com/benlau/asyncfuture

У него есть яркий пример использования QFuture как объекта обещания.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]