問題タブ [omnithreadlibrary]

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 に答える
231 参照

multithreading - OmniThreadLibrary Parallel.Pipeline を使用しているアプリケーションが閉じられた後もバックグラウンドで実行され続けるのはなぜですか?

OmniThreadLibrary を使用して、電子メールを送信するためのバックグラウンド パイプラインを実装しています (この SO の質問を参照してください)。アプリケーションを閉じた後も、バックグラウンドで引き続き実行されていることに気付きました (Windows タスク マネージャーに表示されます)。これは、OTL パイプラインを実装した方法でコードに問題があることを意味します。問題を特定するのを手伝ってもらえますか?

コードは次のとおりです。

上記のクラスを次のように初期化して呼び出します。

アプリケーションのメイン フォームの OnCreate イベントで:

メイン フォームのボタンの OnClick イベントには次のようなものがあります。

後で、メイン フォームの OnDestroy イベントで次のようにクラスを解放します。

0 投票する
0 に答える
211 参照

multithreading - OmniThreadLibrary でキューに入れられたタスクを実行する方法

OmniThreadLibrary を使用して「キューに入れられた」タスクを実行する方法について、誰かが私にガイダンスを与えることができますか? 何でも構いませんが、この質問では 100 通のメールを送信する例を使用します。一度に 3 つのスレッドのみを使用したい。

メールの送信をキューに入れるにはどうすればよいですか?

1 つのスレッドが終了し、次のメール/タスクを受信する準備ができたときに通知を受け取るにはどうすればよいですか?

メール送信の結果を取得するにはどうすればよいですか? (つまり、OK、またはエラーが発生しました)。

OTL を使用した非常に短い例を見てきましたが、上記を実行する方法を理解するには、もう少し包括的なものが必要です。

誰かが上記の方法を説明したり、似たような例を教えてくれたりできますか?

ありがとう

0 投票する
0 に答える
156 参照

multithreading - OmniThread: ThreadPool が機能しなくなる

オムニスレッドがタスクのスケジューリングを停止し、動作を停止するという奇妙なエラーが発生しています...

ここに私が持っているエラーを再現するためのコードがあります

ボタンをクリックすると200個のタスクが正常に作成されますが、タスクマネージャーからスレッド数を見ていると、その瞬間にボタン1をクリックするとスレッド数が減少し始めるとすぐに、スレッド数が突然0に減少し、その後、どのようにしてもタスクをスケジュールするためにボタン1を何度もクリックします。スレッドは作成されず、機能も実行されません。タスクをスケジュールするサーバーにデータを送信しているときに実際にこのエラーが発生しました。サーバーコード領域を分離できなかったため、ユーザー側で問題を生成するためのサンプルを書きました。この問題を解決する方法について誰か助けてもらえますか?

ありがとう

0 投票する
0 に答える
329 参照

delphi - OTL非同期/待機スレッドでローカル変数を使用しても安全ですか?

このような簡単な質問をして申し訳ありません。VCL でバックグラウンド スレッドを使用するのはこれが初めてです。だから、非同期部分でローカル変数を使用しても安全かどうか疑問に思っていましたか?

最初のスレッドが完了せずに、このメソッドを 3 回実行するとします。これは問題につながるでしょうか?

この問題に対する別のアプローチを提案していただけますか? (バックグラウンド スレッドを使用してデータベースにクエリを実行し、結果を VCL データセットに追加します。)

ありがとう。

編集:質問13348970への回答を調べましたが、私の質問は重複としてマークされていました。メソッドが 3 回呼び出された場合、3 つdsのローカル変数はすべて別のメモリ アドレスを指すため、各スレッドは TOracleDataSet のローカル コピーにアクセスし、問題は発生しないという結論に達しました。誰かがこれを確認できれば、質問を閉じることができます、ありがとう.

0 投票する
0 に答える
349 参照

delphi - TBitmap への並列描画

ここでの質問は、スレッド ビットマップ ペイントでのマージ ペイントの結果は、 TThread および古いバージョンの DELPHI を使用することに由来します。

オムニスレッド ライブラリが Delphi XE 7 に同梱されていることがわかりましたが、オムニスレッド ライブラリを使用してこのコードを記述しているときに、このタスクに使用するデザイン パターンを決定できません。TThreadとVCLを使用しているため、omnithreadを使用してTBitmapアクセスも制限されています。

私の経験では、並列ビットマップ処理中、vcl 内のペンはスレッドセーフではありません

現在のシングル スレッド コードは次のようになります。

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

delphi - OTL は D2007 ではコンパイルできません

OTL http://www.omnithreadlibrary.com/をダウンロードしました

D2007 grouproj をコンパイルし、問題なくパッケージをインストールします。

次に、OtlParallel ユニットを使用する単純なコンソール アプリケーションを作成します。もちろん、OtlParallel とその他のいくつかの pas ファイルをプロジェクトに追加します。

しかし、Generics.Collections が見つからないと文句を言います。

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

delphi - バックグラウンド タスクから MainForm (OmniThreadLibrary) にメッセージを送信する方法

バックグラウンド タスクからメイン フォームにメッセージ (TOmniMessage) を送信するにはどうすればよいですか?

Mainform に次のメッセージを送信したい:

main.pas (メインフォーム)

beep.pas (バックグラウンド タスク)