問題タブ [qtconcurrent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - QtConcurrent::map はパラメーターを受け入れません
QtConcurrent::map で関数を実行したいのですが、常にエラーが発生します... Mainwindow: には 2 つの関数がありますon_listWidget_itemClicked and _fillTreeWithList(QStringList selectedListWidget)
。関数on_listWidget_itemClicked should use map with _fillTreeWithList.
私のコード:
ヘッダ:
Cpp:
エラー:
私の問題を解決する方法を知っている人はいますか?
qt - QtConcurrent::run はメインスレッドでどのように巻き上げられますか?
アプリケーションに QFuture ベースの非同期ネットワーク ファサードを構築しました。大まかに次のように動作します。
次のことをQTimer
行うメインスレッドで呼び出しをトリガーする があります (明らかに単純化されています)。
私の仮定は、waitForFinished()
バックグラウンド スレッドがネットワーク リクエストを実行している間、メイン スレッドをブロックすることでした。代わりに、qFatal
エラーが発生します。
スタック トレースではwaitForFinished()
、メイン スレッドに表示されますが、ブロックされる代わりに次のように表示されます (下から上に読む)。
したがって、 が値を取得するのを待つのではなくQFuture
、メイン スレッドで並行タスクと思われるタスクが発行されます。これにより、get()
上で概説した関数が呼び出され、QEventLoop
. その間、QTimer
再び火災が発生し、私は上から主張を受け取ります。
私は何か間違ったことをしていますか、それともQtConcurrent::run
制御がメインスレッドに戻る可能性があるのは完全に有効ですか?
=== 更新 1
@peppe: 実行されるラムダは、単純に HTTP GET を実行し、JSON 応答を解析してSomeType
オブジェクトに生成します。経由でアクセスされる結果QFuture
。
=== アップデート 2
どうやらこれは設計によるものです。qfutureinterface.cpp
Qt 5.4.0 行 293-295 から:
qt - Qt、データベース呼び出し後も GUI をレスポンシブに保つ
ユーザーがボタンをクリックすると、データベース アクセスを伴う (遅い) 操作が実行されるとします。問題は、操作を直接呼び出すと、GUI が応答しなくなることです。
また、シグナル/スロットを試し、obj にリクエストを発行してから、彼の応答 (別のシグナル) を待ちました。とにかく、結果は同じで、応答しない GUI でした。
この問題へのアプローチはどうあるべきですか?
c++ - オブジェクト map(*it) の呼び出しに一致する関数がありません。
関数を複数回呼び出しようとしていますが、それらを使用して並列化しますQtConcurrent::mapped
しかし、私はエラーを克服することができません:
コードは次のとおりです。
qt - Qfuture は null ポインタで構成されています
私のQtマルチスレッドプログラムは、到達するとクラッシュします:
try-catch ブロックを試しましたが、うまくいきませんでした。
nullかどうかを確認するにはどうすればよいですか?
その行でコードにステップインすると、デバッガーは次のように通知します。