問題タブ [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 - OmniThreadLibrary でパイプライン (または BackgroundWorker) をリセット/再初期化することは可能ですか?
再初期化とは、実行中のタスクを停止する(または必要に応じてスレッドを強制終了する) ことを意味し、パイプライン/スレッドが初期化/開始されていないかのように元に戻します。
私のコード(私はdelphi 2010、OmniThreadLibrary 3.02を使用しています)は次のようになります:
私はこのようなものが必要です:
ノート
FWIW、はい、これが本当に悪い考えであることは十分承知しています!
また、タスクに停止信号を送信し、タスクが適切にシャットダウンするのを待ち、タスク内の停止信号を頻繁に確認することが最善の方法であることもよく知っています。この非常に特殊なケースについては、私はそれには興味がありません。
上記のコードはパイプラインについてのみ言及していますが、BackgroundWorker をリセットするソリューションで十分です。
前もって感謝します!
delphi - OTLで使用する場合、匿名の方法で変数をキャプチャするにはどうすればよいですか?
私がやりたいこと:
ジェネリックリストにいくつかのオブジェクトがあります。このオブジェクトのそれぞれを匿名メソッドでキャプチャし、このメソッドを個別のOTLタスクとして実行したいと思います。
これは単純化された例です。
そしてこれが結果です:
ご覧のとおり、メインスレッドではキャプチャが正常に機能しているようです。しかし、オブジェクトへのポインタがキャプチャされたのか、それともそのIDフィールドのみがキャプチャされたのかわかりません。
オブジェクトをキャプチャして匿名メソッドをCreateTask
関数に渡そうとすると、物事がおかしくなります。
まず第一に、の3番目のインスタンスだけTMyObject
がキャプチャされたように見えました。次に、汎用リストにオブジェクトが3つしかないにもかかわらず、コンソールログに4つのメッセージがあります。2番目の動作には一貫性がなく、コンソールに3つのメッセージが表示されることもあれば、4つのメッセージが表示されることもあります。
上記の2つの問題の理由を説明し、問題を排除し、オブジェクトの各インスタンスを個別のOTLタスクに渡すことができるソリューションを提案してください。TThread
(通常のクラスは使いたくないです。)
delphi - .Netの制限が32768であるのに、OmniThreadLibraryが60スレッドに制限されているのはなぜですか?
最近、.NETにあるOmniThreadLibraryとThreadPoolを比較しましたが、Omniは最大スレッド数がはるかに制限されており(60が許可されています)、.NETは.NET4.0では最大32768になります。
なぜそのような制限?
delphi - OTL - オンデマンドでタスクを強制終了
タスク オン デマンドを強制終了するにはどうすればよいですか? 私がこれを行うとき:
メインアプリケーションがフリーズします。実行中のタスクが 1 つしかない場合でも、デバッガーの外部で実行するか、デバッガーの内部で実行するかは問題ではありません。
このコードをタスクに 30 回入れたくないからです。ユーザーとプログラマーにとってイライラします。
これなしでグローバルにこれを行う方法があるはずです。
delphi - タスク グループで 60 を超えるタスクを使用するにはどうすればよいですか?
Taskgroupで 60 を超えるタスクを使用するにはどうすればよいですか? 0 から N までループしてタスクを作成することはできますが、メッセージ処理はできません。タスクからメッセージを送信するために OTL EventMontior を使用しています。
私が質問する理由は、Indy の使用は 60 件のリクエストに制限されているためです。ただし、通常の TThread を使用すると、これらの問題は発生しませんが、他の問題などは発生します。
.NET スレッド プールの最大数:
- Framework 4.0 (32 ビット環境) では 1023
- Framework 4.0 (64 ビット環境) では 32768
delphi - Omni Thread Library でメイン スレッドが応答しない原因を特定するにはどうすればよいですか?
プラットフォーム: VirtualTreeView SVN 5.1.0 & OmniThreadLibrary 3 SVN & Delphi XE2 を搭載した Delphi
もともと問題はVirtualTreeViewだと思っていました。1 秒以下ごとに VST にノードを追加する必要があります。しかし、アプリケーション全体が完全に応答しなくなるまで、CPU レートはすぐに 50% 以上に達するようです。
誰でも助けることができますか?ティア!
編集:問題はOTLから来ているようです。上記のコードを使用する場合、アプリケーションを最小化して CPU を常に 1% 未満にし、10ms のスリープを 1ms に変更します。
しかし、以下のコードは私を悩ませている問題を再現します。
PS: OTL のデフォルトの 1000 キュー サイズへのフラッドを回避するために、次の Task.Comm.Send 操作の前にノードの追加が完了するのを待つ各スレッドにロックを設定します。
PPS: ここでの 10 ミリ秒は、実際の状況ではなく、問題をすばやく再現するためのものです。では、わざわざ理由を尋ねないでください。
OK、結論は次のとおりです。このノードを定期的に更新する必要がある場合は、単一ノードにノードを追加しすぎないでください。ノードが多いほど、それらを更新するためのCPU時間が長くなります。
macos - マルチスレッドDelphiアプリケーションのMacへの移植:私の選択は何ですか?
アプリケーション(XE2で記述)をMacに移植する必要があります。
UI executable
私のアプリケーションは、単純な(シングルスレッド)と見えないengine
( OmniThreadLibrary3.02とCromisDirectoryWatchに大きく依存している)に分割されています
両方のEXEはCromis.IPCを介して通信します
つまり、私は主にこれら3つのコンポーネント(OmniThreadLibrary、Cromis IPC、DirectoryWatch)に問題があります。
今の私の焦点は、ほとんどのコードを持っているエンジンです。
私の質問は、OmniThreadLibrary、Cromis DirectoryWatch、Cromis.IPC for Macに似たものはありますか?(lazarusを使用するか、ターゲットコンパイラとしてMacを使用するXE2を使用するか)
答えは、Delphi XE2とLazarus(私はまったくなじみのないIDE)のどちらを使用するかを決定するのに大いに役立ち、最小限の頭痛でWindowsとMacの両方を提供/サポートするための最良の長期的アプローチを確認します。
delphi - 2番目のスレッドから進行状況インジケータを更新するには?
進行状況インジケーターを含むメイン フォームがあります。データモジュールには 10 個のデータセットがあり、それぞれに OnBeforeOpen イベントが定義されています。
開いているデータセットの進行状況のパーセンテージをメイン フォームの進行状況バーに表示したいと思います。
私はマルチスレッド プログラミングにまったく慣れていないので、誰かアドバイスをお願いできますか?
どうもありがとうございました
delphi - OmniThreadLibrary で Parallel.Async() に params を渡す方法は?
メインスレッドから作業スレッドにいくつかのパラメータを渡すにはどうすればよいですか (つまり、次のようにprocedure
)?
IOmniTaskConfig
(OtlParallel.pas 内の)の定義を確認すると、次のようなというcommented out
プロパティがあります。Param
したがって、私の質問に対する答えはノーだと思いますが、そうでないことを願っています!