問題タブ [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.
multithreading - Qt QtConcurrent プログレスバーの更新
にQTableView
接続していQAbstractTableModel
ます。
モデルはQtConcurrent::map
、アプリケーションのスレッドを作成するために使用されます (ファイルのコピー)
tableviews セルの 1 つにQStyledItemDelegate
a を表示するようにサブクラス化しました。アイデアは、モデルを介して進行状況バーを更新することでした。QStyleOptionProgressBar
動作しますが、一度に 0 から 100% までスムーズではありません。
QAbstractTableModel::setData()
私の「コピーループ」で呼び出されますがQAbstractTableModel::dataChanged()
、ループが終了したときにのみ放出されるようです。私が何をしようと。
これは間違ったアプローチかもしれませんが、スレッドからテーブル ビューの特定の進行状況バーにアクセスする方法がわかりません。
c++ - boost::bindとqtconcurrent::map...それを機能させることができないようです
作る方法が見つからないようですので、よろしくお願いします。
QtConcurrent :: mapは、静的関数と要素のシーケンスで機能します。これが私がやろうとしていることです:
この関数を実行したい:
この要素のセットについて:
これがmapの呼び出しに対して私が行うことですが、コンパイラーはそれを好みません...すべてのboost&Qtドキュメントを読んだ後でも、正しい構文を見つけることができません!
追伸:明らかにこれはC++です
また、boost :: refの呼び出しを気にしないでください、私はそれで遊んでいました。私が解決したいのは、適切なパラメーターを使用してマップするための呼び出しです
ご協力いただきありがとうございます
qt - QProgressDialogの終了/中止に関する問題
現在、コンソール操作用に書かれたプロジェクトのオリジナルに GUI を追加しています。フレームワークとして Qt を選択しましたが、QProgressDialog の close イベントの処理が困難になりました。
問題 1: QtConcurrent::run を使用して、長時間/重いタスクのプロセスをフォークし、「待機中」の QProgressDialog (範囲 0,0) を使用して、長時間実行されているプロセスについてユーザーにヒントを与えました。問題は、ダイアログを閉じることができないことです!
要件 1: 可能であれば、元のパッケージのコードに触れたり変更したりしたくない。
問題 2: 「中止」ボタンをリンクして SimApplication::runSimulation() を終了する方法は?
qt - QtConcurrent ::runを使用したQtQTcpSocketには、別のスレッドでのイベントループが必要です
Qtに非常に大きな(〜1Gb)ファイルを読み取り、QTcpSocketを介してデータをリクエスターに返すWebサーバーがあります。このソケットは、メインサーバースレッドによって作成されます。QtConcurrentを使用して、このソケットをワーカースレッドに渡し、そこにデータを送り返したいと思います。
'returnPartialLargeFile'関数は次のようになります。
私が得るエラーは、'loop.exec()'行をコメントアウトしたままにすると、次のエラーが発生することです。
コメントを外すと、ここでの関数はexec()行で短絡し、ソケットにデータを書き込んだりデータを書き込んだりすることはありませんが、エラーは発生しません。whileループからのデータを含まない切り捨てられた応答を取得するだけです。 。
ソケットの親を変更して新しいスレッドに移動しているので、問題がイベントループとソケットの信号とスロットだけにあることを願っています。私がここで間違っていることについて何か考えはありますか?どうすればこれを機能させることができますか?信号/スロットの問題が発生した場合、ここで接続する必要があるのはどれですか?ありがとう -
multithreading - QtConcurrent::functorで実行
QtConcurrent :: runを関数オブジェクトで使用するにはどうすればよいですか?その方法の例を教えていただけますか?
c++ - QConcurrent::runによって生成されたスレッドをQt終了します
プラットフォーム:Win7 x64、MinGW-rubenvb(4.7.2-x64)、Qt 4.8
次のように、QConcurrent :: runを使用して生成された長いタスク(ポピュレーションファイルの読み取り、ポピュレーションファイルの書き込み、シミュレーションの実行)がほとんどないとします。
通常、これらのタスクは完了するまでに少なくとも15秒かかります(シミュレーションの場合、数時間以上かかります)。まだ完了していないスレッドによるクラッシュを防ぐために、MainWindow::closeEventを次のように再実装します。
これは問題なく動作しますが、MainWindowの「x」ボタンをクリックすると、アプリが最終的に終了したにもかかわらず、フリーズして「応答していません」(テキストはOSから提供されていると思います)と表示されているようです。
MainWindowのclose()スロットがトリガーされたらすぐにアプリを終了したい。では、まだ完成していないスレッドの待機時間を短縮するにはどうすればよいでしょうか。または、実行中の長いジョブがまだあることをユーザーに通知するにはどうすればよいですか(完全にシャットダウンするまでに数時間かかる場合があります)。(closeEventにQDialog / QMessageboxを含めようとしましたが、新しく作成されたウィジェットもフリーズします)
注:AppClass:lengthyJobs [readPop()/ writePop()]の場合、これらは自己完結型の関数であり、小さなステップに分解することはできません。AppClass :: runSim()の場合、より小さなステップが可能になる場合があります。
c++ - How to control (i.e. abort) the current evaluation of a QScriptEngine
I evaluate JavaScript in my Qt application using QScriptEngine::evaluate(QString code)
. Let's say I evaluate a buggy piece of JavaScript which loops forever (or takes too long to wait for the result). How can I abort such an execution?
I want to control an evaluation via two buttons Run
and Abort
in a GUI. (But only one execution is allowed at a time.)
I thought of running the script via QtConcurrent::run
, keeping the QFuture
and calling cancel()
when the Abort
is was pressed. But the documentation says that I can't abort such executions. It seems like QFuture
only cancels after the current item in the job has been processed, i.e. when reducing or filtering a collection. But for QtConcurrent::run
this means that I can't use the future to abort its execution.
The other possibility I came up with was using a QThread
and calling quit()
, but there I have a similar problems: It only cancels the thread if / as soon as it is waiting in an event loop. But since my execution is a single function call, this is no option either.
QThread
also has terminate()
, but the documentation makes me worry a bit. Although my code itself doesn't involve mutexes, maybe QScriptEngine::evaluate
does behind the scenes?
Warning: This function is dangerous and its use is discouraged. The thread can be terminated at any point in its code path. Threads can be terminated while modifying data. There is no chance for the thread to clean up after itself, unlock any held mutexes, etc. In short, use this function only if absolutely necessary.
Is there another option I am missing, maybe some asynchronous evaluation feature?