問題タブ [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.
multithreading - TOmniEventMonitor はバックグラウンド スレッドで使用できますか?
元の質問
Delphi XE4 アプリケーションでは、TOmniEventMonitor を使用して他のタスクからメッセージを受信します。これがメイン スレッドで実行されている限り、正常に動作しますが、同じコードをタスクに配置すると、TOmniEventMonitor はメッセージの受信を停止します。以下に簡単な例を示します。Button_TestInMainThread をクリックするとファイルが期待どおりに書き込まれますが、Button_TestInBackgroundThread をクリックすると書き込まれません。これは仕様によるものですか、それとも TOmniEventMonitor を使用している間にこれを機能させる方法はありますか?
追加の観察
次のコードでは、バックグラウンド スレッド内で TOmniEventMonitor を正常に使用できるようです。これは非常に不器用な解決策です。IOmniTwoWayChannel は作成されますが、意味のある方法では使用されません。もう呼ばれません。ここで私が間違っていることを誰かに教えてもらえますか?
delphi - BackgroundWorker の TOmniValue 配列で文字列を使用するとエラーが発生します
TOmniValue 配列に文字列がある場合、名前または明示的なインデックスで値にアクセスすると、アクセス違反が発生します。例については、次のコードを参照してください。何か間違ったことをしていますか、それとも Delphi または TOmniValue にエラーがありますか? インデックスによるアクセスの回避策を見つけましたが、名前によるアクセスはどうでしょうか。
更新: 簡単に再現できるように Test をコンソール アプリに移動しましたが、エラーはすべての反復ではなく、2 回ごとの実行でのみ発生します。それとも、今は同じエラーでさえないのでしょうか?
Otl (r1333) の最新のトランクを使用しています。3.03a でも同じエラーが発生したと思います。
delphi - TOmniValue が名前の長さが 1 に等しい名前付きの値を受け入れないのはなぜですか?
次のプログラムでは、 の実行時にエラーが発生しますTOmniValue.CreateNamed
。
例外はException
メッセージ付きのタイプです:
TOmniValue.CreateNamed: 無効な名前タイプ
名前の長さが 1 文字を超える場合、コードはエラーなしで実行され、期待される出力が報告されます。
私のコードに問題がありますか、それともライブラリに問題がありますか?
delphi - TStringList を TOmniTask プロシージャに渡す
グローバルスレッドプールを利用していくつかのファイル操作を実行するDelphi 2007アプリでOmniThreadLibraryを使用しています(特定の順序で実行されることを確認する必要があります)。
TStringList に格納されている、新しく作成された Ini ファイルの内容があります。
次に、TStringList を TOmniTask のインスタンスに渡します。
TOmniTask インスタンスで TStringList を取得する方法がわかりません
上記はエラーを返します。
私は型キャストを試みました:
しかし、コンパイルエラーが発生します:
OmniThreadLibrary バージョン 3.0 を使用しています - D2007 で 3.03b をコンパイルできません
@gabr について: OmniThreadLibray の素晴らしい作品、ありがとう。
delphi - フォームを閉じたときに OmniThread タスクを終了して nil しますか?
これは、OmniThread ライブラリを使用して別のスレッドとして実装したストップウォッチのサンプル コードです。
これは私の質問です:フォームを閉じるときにタスクを終了して nil にする必要がありますか?それとも、フォームを閉じるときに自動的に破棄されますか?
delphi - OmniThread 並列タスクのパラメーターにアクセスすると、タスクが中止されます
OmniThread ライブラリを使用して並列タスクを作成するプログラムで、並列タスクのパラメーターにアクセスしようとすると、パラメーター アクセスの後のコードが実行されないため、明らかにタスクが中止されます。
では、パラメータへのアクセスの何が問題になっているの'From'
でしょうか?
multithreading - Delphi OTL Why does MultiThreading program uses only half the available CPU's
During executing my multithreading program only 4 of the available 8 CPU's are being used. Why? What can I change to make all CPU's working?
(nMax and the CalcList.Count are both 16, Intel I7 HyperThreaded)
Thank you
delphi - OmniThreadLibrary で IOmniParallelJoin のファイナライズを処理する方法は?
GUIの応答性を維持したいので、関数とIOmniParallelJoin
並行していくつかのタスクを計算するために使用しています。NoWait
しかし、計算がいつ終了するかを知る必要もあります。そのような場合にトリガーされるイベントはありますか?
function - Delphi - OmniThreadLibrary Parallel.ForEach とレコード
私は Delphi XE2 を実行しており、OmniThreadLibrary に慣れようとしています。3.03b がインストールされています。
私は Parallel.ForEach の例を見てきましたが、バックグラウンドで何が起こっているのかわかりません (これは後で明らかになるかもしれません - 申し訳ありません)。私の目標を達成する方法をよりよく理解するのに役立つ情報を提供していただければ幸いです。
2 つの関連する値 a と b の単なるコンテナーであるレコードがあるとします。次に、これらのレコードの配列を返す並列ループを実行したいと考えています。OmniThreadLibrary を使用してこれを行うことは可能ですか?
たとえば、MultithreadingMadeSimple ForEachUnorderedPrimes の例をベースとして、次の行に沿って何かを行うことはできますか?
上記のコード例にはかなり根本的な問題があることは承知していますが、私がやろうとしていることを理解していただければ幸いです。
delphi - Delphiでfor-down-toループを並列にコーディングし、リストをアクティブにして、アイテムを削除する方法は?
たとえば、次のコードを見てください。
たとえば、OmniThreadLibrary を使用してこれをどのように並列化しますか? 出来ますか?それとも再構築する必要がありますか?
は大きく、各反復で使用した後にアイテムを解放することは、メモリ使用量を最小限に抑えるために重要であるため、myStringList.Delete(i);
各反復で呼び出しています。StringList