Delphi 2006 - XEに新しい並列プログラミング機能がありますか?Delphi 2006 - XEには新しい並列プログラミング機能がありますか?
答えて
Delphi XEにはTThread.CreateAnonymousThreadがあり、バックグラウンドタスクを簡単に実行できます。
些細なデモ:2010年以来
TThread.CreateAnonymousThread(
procedure begin
Sleep(10000); // replace with a real workload
end
).Start;
リリース自体は最小限です。 Delphi 2009では、匿名メソッドのサポートをTThread.Synchronize
に追加し、XEでスレッド通信キューをGenerics.Collections
に追加しました。
しかし、コミュニティはいくつか興味深いものに貢献しています。たとえば、OmniThreadLibraryをチェックしてください。
現在、マルチスレッドで実行するコードがある場合でも、マルチコアCPUはありません。ロックとロック解除の問題はここにある理由は
- メモリマネージャです。過去
- 文字列は、インターフェイスがIMO最も強力とDelphi 7の後に導入少なくとも知られているマルチスレッド機能がTThread.Queue方法参照カウント
チアー
参照カウント
Synchronize(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);
のあなたは
Queue(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);
TThread.Queueメインスレッドが終了するまで同期とワーカースレッドを待たずに継続することができますTThread.Synchronizeする代わりに、(ワーカースレッドが待機を呼び出しているを使用することができます同期されたコードの実行) - PostMessageでカスタムメッセージ処理の代わりに使用できる本当に素晴らしい機能です。
FYI、Delphi 10.2 Tokyoには、 '' TThread.ForceQueue() '](http://docwiki.embarcadero.com/Libraries/en/System.Classes.TThread.ForceQueue)が追加されています。これは' TThread.Queue ()を除いて、メインUIスレッド*で呼び出されたとしても、後で実行するために常に指定されたコードをキューに入れる点が異なります。 'TThread.Queue()'は、メインUIスレッドで呼び出されたときに実行をキューに入れません。すぐに実行されます( 'TThread.Synchronize()'のように)。 –
か、これは(ないprocesxpのような例のSysinternalsのもので)デバッガでのみ表示されてもXEスレッドは、名前を付けることができ
- 1. Delphi XEのマルチスレッドの新機能は何ですか?
- 2. Delphi xe、ユニットdbExceptが見つかりません。 Delphi 2009にありました
- 3. delphi 2006のローカルフォーム
- 4. Delphi XEでJCLを使用したスタックトレースがありません
- 5. Delphi 2006からDelphi XEへのアップグレード後にアプリケーションを終了するときに無効なポインタ例外
- 6. mapplyのための並列機能はありますか?
- 7. Delphi 2006リファクタリングキーボードマッピング
- 8. 新しい機能に間違いはありますか?
- 9. Delphi 2006のTPageControlコンポーネント
- 10. Delphi XEの 'VarToStr'?
- 11. Delphi XEのテーマアプリケーション
- 12. Delphi XE Reportman
- 13. Delphi XEとWinsock
- 14. BDE with Delphi XE
- 15. .NETにはDelphiのVCLコンポーネントモデルと同等の機能がありますか?
- 16. Delphi 2009のバグ? - > * .resがプロジェクト検索パスに見つかりません(Delphi 2006で動作します)
- 17. INDY 10.1.5 - どのSSL dllがDelphi 2006で動作しますか?
- 18. C++およびJavaにプログラミング機能がありません
- 19. 突然、デバッグ時に突然Delphi 2006 IDEが不安定に動作することがありますか?
- 20. Delphi 2010-XEのTWordApplication
- 21. DELPHI XE wpf like GUI
- 22. Delphiにはisqrtがありますか?
- 23. Delphi XEのモデリング - 'Open diagram'が無効にされています
- 24. intelliJには文字列置換機能がありますか?
- 25. Delphi XEのLongWordとCardinalの違いは?
- 26. Delphi XEはWebServiceを正しく消費しません
- 27. DelphiにPHPのVardumpのような機能はありますか?
- 28. Delphi 2009/2010で新しい文字列型はどのように機能しますか?
- 29. LinuxでのCプログラミングの新機能、型キャスト時にぶつかりました
- 30. TCategoryPanelGroup(Delphi XE)でカテゴリを並べ替える方法
「現在、マルチコアのCPU」 - スレッドを作成すると、すべてが1つのコアで実行されると言っていますか? – RobertFrank
これらはすべてのコアで実行できますが、/ usedと呼ばれるロックコードがある場合、memバス上にアサートして、他のCPU /コアを呼び出し中に停止させることができます。たとえば、4つのコアCPUと4つのスレッドが各コアで動作しているとします。ロックが発生した場合は、他のすべてのcpus /コアを停止する必要があります。ここであなたの読書のためです:http://software.intel.com/en-us/articles/implementing-scalable-atomic-locks-for-multi-core-intel-em64t-and-3232-architectures/ – APZ28
それはまさに何ですか?私たちはEnhanced RTLとSynScaleMMを避けたかったのです。 http://synopse.info/forum/viewtopic.php?id=57を参照してください。しかし、主なボトルネックは、LOCK asm命令ではなく、メモリマネージャです。それがSynScaleMMが便利になったときです。 –