私はマルチスレッドの基本的なCS理解を持っていますが、アプリケーションの単純なタイマーを超えて何もする必要はありません。誰かが私にマルチスレッドアプリケーションを使って作業する方法を教えてくれる良いリソースを知っていますか?基本を説明し、さらに難しいものをいくつかポーズしていますか?私は理論的にスレッディングを理解していますが、ネットでは実際にはありません。
答えて
これはJoseph Albahariの素晴らしい無料リソースです。
- BackgroundWorkerの制御
- WaitHandles
- コールバック関数
- ポーリング一般的にあなたがしたいASyncResultオブジェクト
.NETでスレッドを同期する4つの基本的な方法があります。そのリストの先頭から始めて作業してください。それは最初の見方を意味し、背景職人のコントロールが状況に適しているかどうかを確認します。しかし、それはかなりWindowsフォームを仮定し、あなたは1つの新しいスレッドを生成しているだけです。
次に、waithandlesを試してください。 Waithandlesは複数のスレッドを一緒に調整するのに適しています。それらをすべて蹴飛ばすことができ、それらのすべてが終了するのを待つか、特定の番号をアクティブにしておきたい場合は、終了するときにただ1つを待って次のものを産み出します。あるいは、あるスレッドがはるかに早く終了することを知っているかもしれません。それで、それが完了するのを待って、少し仕事をして、残りが完了するのを待つことができます。
Waithandlesは、たとえば、スレッドを1つ追加するだけで、完了するまでブロックしたくない場合は、少しのように思えるかもしれません。次に、コールバックを使用して、スレッドが完了するとすぐに指定した関数が呼び出されるようにすることができます。
最後に、何らかの理由で上記のいずれもうまくいかない場合にのみ、ポーリングに戻ることができます。通常(BackgoundWorker含む)リサイズイベントの結果として、作成した
- OS:
私は順序でも大体、.NETで新しいスレッドを取得するための5つの方法を考えることができます。
- Obj.Begin ___()/ End ____()。特定のCLRクラスには、すでにこれらの非同期メソッドが定義されていますが、使用可能なときに使用することは明らかです。
- ThreadPool.QueueUserWorkItem()。これを使用して、独自のスレッドを作成します。
- Delegate.BeginInvoke()/ EndInvoke()。この方法で任意の方法をラップすることができます。
- Thread.Start()。 することができますが、私は最近、何かを読んでいます(今、リンクがない)QueueUserWorkItemがうまくいかない場合、デリゲートメソッドがおそらく良いです。
二つの偉大な記事:
What Every Dev Must Know About Multithreaded Apps
Understand the Impact of Low-Lock Techniques in Multithreaded Apps
この記事は、あなたが特に探しているまさにありませんが、それはうまくいけば、一般的に助けになるだろう(すなわち、それをはに関連しており、非常に良好な読み取り値です)。
The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
.NETでマルチスレッドについて学ぶための良いウェブリソース:
- HTML version。 http://www.albahari.com/threading/
私はすべての.NET開発者の偉大な概要を持っている:私は、件名に知っている最高のリソースの
- Printable version
- Further resources - (including examples)
一つは、書籍「C#でのスレッド」でありますマルチスレッドアプリケーションをプログラミングするために理解する必要があります。
- 1. 'ツールヒント'には論理的または視覚的な親がありません
- 2. Windows上のJava File.listFiles()は論理的にはシーケンシャルではありません
- 3. ループチェッカーは論理的に終了しませんが、
- 4. エラーを理解しています "値はnullではありません"エラー
- 5. 私はミニマックスアルゴリズムについて理解していません
- 6. は私が「実行されることはありません」を理解しようとしている
- 7. 私はsqlite3_finalizeを完全に理解していません
- 8. 私は完全にメディアクエリを理解していません
- 9. 私は論理を解決することができません
- 10. 私は実際にその機能を理解しています
- 11. スレッディングを理解するには?
- 12. スカラコード - 私は理解できません
- 13. PycharmまたはEclipseに論理フォルダがありますか?
- 14. スイッチには論理引数に問題があります
- 15. エラーメッセージ私はアンドロイドプロジェクトのビルド中に私は理解していません
- 16. 私はKnockout.jsを理解しました。今はあまり確信していません。
- 17. は」 '==ない' との間に論理的な違いは、(あるなし)=あり
- 18. 私はPythonを学んでいますが、私はこの表記を理解していません。
- 19. 論理ゲート私はまったく対処できません
- 20. 理解 "未定義はオブジェクトではありません( 'this.props.navigation.navigate)
- 21. エミュレータで私のアプリは正常に動作していますが、実際のデバイスではありません
- 22. 私が理解しているかわかりません
- 23. CakePHP HABTM - 私はそれを理解していません
- 24. 私はJavaのブール値を理解していません
- 25. 私はこの文を理解していません
- 26. 私はPerl Taintモードのエラーメッセージを理解していません
- 27. 私はこの構文エラーを理解していません
- 28. 私はNewNotImplementedExceptionのランタイムエラーを理解していません
- 29. 私はクォーツのgetNextIncludedTime()を理解していません
- 30. 私はアプリケーションドメインを理解していません