問題タブ [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.

0 投票する
1 に答える
4028 参照

c++ - QException の目的は何ですか?

Qt 5.0 - Qt でQExceptionクラスが導入されました。

このクラスから継承する利点は何ですか? QException クラスから継承しないクラスをスローするとどうなるでしょうか?

前もって感謝します!

0 投票する
2 に答える
2260 参照

c++ - QtConcurrent::run 関数 (または同様のもの) から QFutureWatcher に progressText を伝える方法は?

を使用して非同期実行用の関数を起動しQtConcurrent::run、 を使用して返された未来を監視してQFutureWatcherいる場合、その非同期実行関数で進行状況のテキストを通信するために何かできるとしたら、その結果としてQFutureWatcherシグナルprogressTextChangedが発生しますか?

つまり、私がやりたいことはのようなものです:

ただし大きな問題、 QtConcurrent::runドキュメントには明確に記載されています

QtConcurrent::run() によって返される QFuture は 、キャンセル、一時停止、または進行状況レポートをサポートしていないことに注意してください。返された QFuture は、実行中/終了ステータスと関数の戻り値を照会するためにのみ使用できます。

では、上記がやろうとしていることと機能的に同等のものを得るために私ができる最も簡単なことは何ですか? 放棄しなければなりQtConcurrent::runませんか?QFuture? 両方?(そしてQThread、キューに入れられた接続に戻りますか?)

0 投票する
1 に答える
1834 参照

c++ - QtConcurrent内で使用する非静的メンバー関数のアドレスを取得する方法は?

他のスレッドで非静的メンバー関数を実行しようとしています。もし私が行くならば:

それはそれを促します

ISO C++ では、修飾されていない、または括弧で囲まれた非静的メンバー関数のアドレスを取得して、メンバー関数へのポインターを形成することを禁止しています。

しかし、この余分な参照記号を削除すると:

それはそうなる

「PortManager::innerAsk」をタイプ「void (PortManager::)()」からタイプ「void* (PortManager::*)()」に変換できません

これらの追加の星 (*) を左側に追加するには、右側に何を追加しますか?

しかし、それでも、そこにたどり着いたとしても、常に別のエラーがあります。run(T(*)()) について:

'run(void* (PortManager::*&)()) の呼び出しに一致する関数がありません

この参照がどのようにそこに到達したかを理解するのは頭がおかしいです...

0 投票する
1 に答える
218 参照

c++ - シングルトンに QtConcurrent を使用する

私は自分のプロジェクトでスレッドセーフな QObject シングルトンを使用していますが、QMutex や QThread ではなく QtConcurrent を使用してそれらを作成するのが正しいかどうか疑問に思っていました。

シングルトンコードを書く方法は次のとおりです。

これは次の方法よりも優れていますか?

または、これを行う他のより良い方法はありますか?

ありがとうございました。

注: 共有インスタンスの破棄は個別に処理しています。

編集:共有インスタンスをメインスレッドに配置したい。

0 投票する
2 に答える
3275 参照

c++ - Qt同時実行、参照渡しで値を渡しますが、メモリアドレスが異なりますか?

関数をQtConcurrent::run実行して値を参照渡ししていましたが、値のメモリアドレスが異なります。

しかし、ポインタで値を渡すと、アドレスは同じです! 私はそれを理解することはできません。私は何かが恋しいですか?

これがコードです。

出力:

0 投票する
3 に答える
2435 参照

c++ - 「無限」ループでQtConcurrentを正しく処理する

ユーザーがカメラからビデオを見て記録できるプログラムを実行しています。QtMEL ライブラリを使用して、カメラ フィードと記録を取得しています。カメラが起動すると、QTconcurrent::run() で関数を呼び出してフレームを取得します。この関数内には、カメラ フィードがシャットダウンされたかどうかを確認する無限ループがあり、シャットダウンされた場合はループを終了します。このようなもの:

ユーザーがカメラを閉じて (フレームのグラブを停止し、スレッドを終了します)、プログラムが存在する場合は、すべて問題ありません。問題は、ユーザーがカメラ フィードをオンにしたままプログラムを終了した場合です。これが発生した場合、プロセスは永久に実行し続けるか、セグメンテーション違反エラーをスローします。

ドキュメントを検索し、それに従って:

QtConcurrent::run() によって返される QFuture は、キャンセル、一時停止、または進捗レポートをサポートしていないことに注意してください。返された QFuture は、実行中/終了ステータスと関数の戻り値を照会するためにのみ使用できます。

私は、それが最善かどうかわからないこの問題の修正を思いついたので、私よりも経験豊富な人からもう少し洞察を得たいと思っています。

基本的に、次のように closeEvent を再実装しました。

そしてスロットで:

たぶん私は素朴ですが、これにはもっと良い解決策があるようです。経験のある人が私を助けてくれますか?

お時間をいただきありがとうございます。