問題タブ [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
QtConcurrent::run() で非静的メンバー関数を使用していくつかの作業を正常に並列化しました。現在、静的メンバー関数を使用して並列化された作業を実装しようとしています。私は Random クラスを持っており、1 つの正確なインスタンスで rand(double,double) 静的関数を呼び出したいと考えています。これは乱数ジェネレーターであり、新しくシードされたジェネレーターで runif を呼び出すスレッドを実行したいと考えています。ここでこれを試しました (クラス solveParallel は、QtConcurent::run と Qfuture::result() をそれぞれ呼び出す runRandom() と resultRandom() 関数を持つ単純なクラスです):
コンパイルエラーは「関数の引数があいまいであるため、テンプレートの引数を推測できません」です::手がかりはありますか?
ありがとうございます。
qt - QtConcurrent マップ使用時のシーケンス引数のエラー
QtConcurrent::map を使用してこの関数を実行しようとしています
このコンテナー/シーケンス (mainwindow ヘッダーで宣言され、mainwindow コンストラクターで初期化される)
ここに私が実行しようとしているコードがあります
ここに私が得ているエラーがあります:
「imageList」内のすべての要素に対して「createQImage」関数を実行する必要があります。これは数千に達する可能性があります。map 関数の最初のパラメーターに問題があると思います。そして、私が読んだことから、互換性に関係している可能性があります。私が関連付けることができたオンラインのサンプルコードはあまりありません。私は Qt を初めて使用し、経験豊富なプログラマーではありませんが、助けとフィードバックをいただければ幸いです。
または、QtConcurrent を使用してこれを行うより良い方法はありますか?
前もって感謝します!
c++ - QtConcurrent - スレッド内の同じ関数へのグループ化された呼び出し
スレッドでランダムなポイント (ランダムな座標) を生成する同じ関数を数回呼び出すためのベスト プラクティスを知りたいです。実際、この関数の並列化された呼び出し、たとえば randomPoint() を既に実装しています。ここで、呼び出しごとにスレッドを作成するのではなく、使用可能なスレッドの数だけ計算を実行することで改善されるかどうかを試してみたいと思います。計算します
私にとっては、8 つのスレッドが利用可能です。実行する同様の計算が2000あります。したがって、スレッドごとに 2000/8 の計算で 8 つのスレッドを実行したいと考えています。
しかし、QtConcurrent 呼び出しを実装する最善の方法がわかりません。とりあえず書きます
そして futurRand_.result(); メソッド randomPoint() を適応させ、最初は単一のポイント (double*) を返すようにして、2000/8 ポイントのセットである double** を返すことができるようにしました。
しかし、私は QConcurent::map() で代替を見ました。より効率的な方法はありますか?QThreadで?
Qt でのマルチスレッドの経験は大歓迎です!
よろしく。
-- 編集: より正確にするために: マップには署名があります
または、その引数の 1 つとしてイテレータを取ります。ただし、ここでは、同じインスタンスで毎回呼び出される関数thisを呼び出します。どうやって進める?他に便利な方法はありますか?
multithreading - QProcess、QEventLoop - 並列処理に使用
QEventLoop (QProcess?) を使用して、Qt で同じ関数への複数の呼び出しを並列化できるかどうか疑問に思います。QtConcurrent または QThread との正確な違いは何ですか? より正確には、プロセスとイベント ループとは何ですか? QCoreApplication は main() メソッドでできるだけ早く exec() する必要があると読んだので、なぜそれがメイン スレッドと異なるのか疑問に思います。
Qt を使用したプロセスとスレッドへの効率的な参照として指摘できますか? 私は公式ドキュメントを読みましたが、それらのことは不明のままです。
ありがとうございます。
multithreading - QRunnable - 使い方、例
QtConcurrent の代わりに QRunnable を使用しているコードを指摘できます: Qtdoc で QRunnable の例が見つかりません。
同じアプリケーションで QRunnable と QtConcurrent を試したことがありますか?比較したパフォーマンスについてコメントしていただけますか?
c++ - 中断のないI/Oのベストプラクティス
非常に詳細なログを生成する必要がある小さなアプリを使用しています。このような単純なシングルトンロガークラスを実装しました
今、私はQtとC ++に少し慣れていませんが、おそらくこれはすべて間違っているので、気楽に行ってください:)。この方法を使用すると、ログに記録しない場合と比較して、パフォーマンスが約22%低下します。これは、これまで管理できた中で最高の方法です。パフォーマンスの低下は、QtConcurrentスレッドの作成によるものだと思います。
私の質問は、これが最善のアプローチなのか、それともまったくログに記録しないよりもパフォーマンスがさらに向上する、これを実装するためのより良い方法があるのかということだと思います。アプリケーションのロギングが遅くなることは承知していますが、これを可能な限り最小限に抑えようとしています。
multithreading - メンバー関数を持つ QtConcurrent::map() = コンパイルできません
私のプロジェクトは、検索エンジンの動作を示す小さなプログラムを作成することです: 任意のクエリに対してインデックスを作成し、結果を返します。インデクサー部分で作業を完了しましたが、複数のファイルを一度にインデックス付けして改善したいと考えています。MainWindow クラスは次のとおりです。
これは次の実装ですadd
(同じファイルのインデックスを再度作成しないようadd
にアクセスfileList
する必要があるため、静的メソッドにすることはできません):
メソッドの実装は、ファイル リストを受け取り、各ファイル名index
を呼び出すことです。add
これらのコードをコンパイルするときに受け取るエラーは次のとおりです。
私は QtConcurrent がどのように機能するかについてあまり詳しくありません。また、ドキュメントには詳細が記載されていません。ここの誰かが助けてくれることを本当に願っています。前もって感謝します。
multithreading - QtConcurrent 実行のスレッド ID
QT でマルチスレッド プログラムを実行しています。
このコードを使用して、期待どおりに動作するかどうかを試します。
そして、thread_process1 と 2 の両方が 1 行だけです。
ただし、どちらもスレッド ID「ffffffffb6085b40」を示しています。
私はそれを間違っていますか?? QFutureWatcher は役に立たないようです。
c++ - std :: bind、thisおよびQtConcurrent
で使用されているメソッドstd::bind
にバインドするために使用しようとしていますthis
QtConcurrent::blockingMapped
ヘッダ:
}
ソース:
したがって、ここでImが行っているのはblockingMapped
、のそれぞれConfigNode
で同時にステップを実行することcurrentConfigs
です。std::bind
にバインドthis
するために使用してstep
いるので、のドキュメントのように、必要な引数は1つだけですblockingMapped
。
私は得ています
とnote: 2 arguments expected, 1 provided
どこで私は間違えましたか?
編集
修正された作業バージョン(将来の「参照」用):
ヘッダ:
ソース:
multithreading - QtConcurrent スレッドが遅い!! 私は何を間違っていますか?
qtconcurrent::run()
オブジェクトを介してメンバー関数を呼び出すのと同じくらい私の呼び出しが遅いのはなぜですか??
(例:QtConcurrent::run(&db, &DBConnect::loadPhoneNumbers)
を呼び出すのと同じくらい遅いdb.loadPhoneNumbers()
)
詳細な説明については、以下をお読みください
QtConcurrent::run
SQLデータベーステーブルに送信されるデータを高速化するために、スレッドを作成しようとしています。QMapであるメンバー変数を取得し、それを繰り返して各キーと値をデータベースに送信しています。
QtConcurrent::run() 呼び出しのメンバー関数:
スレッドを呼び出す main.cpp セクション
私の状況理解
私の理解では、このスレッドはメインスレッドとは別のスレッドの新しいプールで実行されます。私が見ているのはそうではありません(データベースのこの呼び出しの前に、他に2つの QtConcurrent::run() 呼び出しがあることに注意してください。データベース呼び出しを続行する前に、すべて終了する必要があります)
QtConcurrent::map() / mapped() を使用することを考えましたが、QMap で適切に動作させることができませんでした。(どちらにも役立つ例が見つかりませんでしたが、それは問題ではありません...なぜ私がそれを使用しなかったのか誰かが尋ねた場合の参考までに)
何が起こっているのかを調べるためにいくつかの「デバッグ」作業を行ってきました。私のテストでは、QThread::currentThread() を使用して、現在呼び出しを行っているスレッドを見つけます。これが、私のプログラムのさまざまなスレッドで起こっていることです。(すべての qtconcurrent::run() 呼び出しは main.cpp FYI で行われます...それが違いを生むかどうかはわかりません)
上記のように、最初のqtconcurrent::run()
呼び出し以外はすべてメイン スレッド上にあります (oO)
質問:
私の理解では、すべてのスレッド (all qtconcurrent::run
) は独自のスレッド上にある必要があります (最初のスレッドのみ)。それは本当ですか、それとも何か不足していますか?
次に、私の loadPhoneNumebrs() メンバー関数はスレッドセーフですか?? (私が見ることができるものから何も変更していないので)
最大の疑問:loadPhoneNumbers()
qtconcurrent::run
メンバー関数を呼び出したときと同じよう
に呼び出しが遅いのはなぜですか? (例: db.loadPhoneNumbers()
qtconcurrent::run() バージョンと同じくらい遅い)
どんな助けでも大歓迎です!