私はココアのインターフェースを持っています。ボタンを押すといくつかのデータを処理したいのですが、動作している間はそのインターフェースを使い続けたいと思います。私は唯一の解決策はNSThreadだと思います。スレッドが生成された場合、IBActionメソッドから戻らないようにするロック機構がありますか?Cocoaインターフェイスのボタンを押してスレッドを開始し、スレッドの実行中にインターフェイスを使用し続けることはできますか?
答えて
いいえ、ロック機構はありません。新しいスレッドが開始され、現在のスレッドが続行されます。 NSThread
に加えて、performSelectorInBackground:withObject:
とおそらくはNSOperation
を見ることができます。
ココアについてはあまり知らないですが、ユーザーの入力を自由にしながらUIをフリーズしたまま(UIがフリーズしないように)、バックグラウンドで何かを処理する新しいスレッドを開始することは、両方のスレッドが一緒に(同時に)動作し、プログラマーは同期問題があればそれを処理しなければなりません。あなたは間違いなくこの技術を進めるべきです。
おかげで、 Sourabh
はNSOperation
を見てみましょう。 NSOperation
は、役に立つようにサブクラス化しなければならない数少ないココアクラスの1つです。 NSOperation
サブクラスにdelegate
プロパティを追加すると、操作が完了したときに通知を受け取ることができます。 http://softpixel.com/~cwright/programming/threads/threads.cocoa:また、あなたは私からの例を踏襲し、操作がデリゲートに戻っ
@implementation MyNSOperationSubclass
-(void)main
{
//do operation here
//operationResult is used to report back to the delegate. operationResult could include a userInfo key so that the delegate can have some data passed back, or an error key to indicate success of the operation.
NSDictionary *operationResult;
//Some checks to ensure that the delegate implements operationHasFinished: should be added.
//waitUntilDone: YES locks the main thread
[[self delegate] performSelectorOnMainThread:@selector(operationHasFinished:) withObject:operationResult waitUntilDone: YES];
}
@end
デリゲートは、データがスレッドによって処理されているように私は私のインターフェイスをアニメーションすることができますので、まだ処理している間にメッセージを送信できるようになりますか? –
はい。 NSOperationはスレッド化をカプセル化します。したがって、あなたのNSOperationサブクラスが実行する処理は、あなたのメインスレッド(またはそのような他のスレッド)に干渉することはありません。 NSOperationがメインスレッドに与える唯一の時間はperformSelectorOnMainThread:を呼び出すときですが、それは設計上のものであり、望ましい動作です。 –
- 1. アプリケーションの起動プロセスでスレッドを開始しても、スレッドは実行され続けますか?
- 2. エグゼキュータを使用してもスレッドを開始できません
- 3. ボタンを押したときに遷移するインターフェイス
- 4. IDEからFlinkを実行しているときにFlinkジョブマネージャのWebインターフェイスを開始するには
- 5. OpenMPはスレッドを実行しますがメインを続ける
- 6. 別のスレッドを開始すると、アクティビティのスレッドは終了しますか?
- 7. IComparerインターフェイスはC#の別のスレッドで動作しますか?
- 8. は複数の実行スレッドで同時に操作を開始します
- 9. スレッドとスレッド開始
- 10. スレッドが開始パラメータを持つときにスレッドを開始して結合する
- 11. (メッセージポンプを使用して)uiスレッドでデリゲートを実行します。
- 12. 上記のスレッドがConsole.ReadLineを実行しているときに、.NETで別のスレッドを中止する方法
- 13. アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。
- 14. オブジェクトへのインターフェイスの受け渡し、またはCocoaでの委任の使用?
- 15. Pythonスレッドは、Thread.startを呼び出す前に実行を開始します。
- 16. CoClassAttributeを使用して(ab)インターフェイスのデフォルトの実装を提供することはできますか?
- 17. スレッドから新しいスレッドを開始する
- 18. Objective-C++ GUIを使用したC++アプリケーションでCocoa GUIスレッドを見つけることができません
- 19. "スレッド内の例外" AWT-EventQueue-0 "java.lang.NullPointerException"ボタンを押したとき
- 20. ブロッキングソケット接続を実行しているスレッドを中断する方法は?
- 21. Androidスレッド - 別のスレッドからスレッドを実行し、ハンドラメッセージを待っています
- 22. QtConcurrentを使用して別のスレッド上のシグナル/スロットを接続する::実行
- 23. +と - ボタンを使用してインターフェイスを作成する必要があります。+と - を押すとインターフェイスの下部が変更されます
- 24. jboss5スレッドプールを使用してスレッドを開始
- 25. .NET - あなたはインターフェイスを越えてできますか?そしてインターフェイスを使用しない場合は
- 26. runnableインターフェイスを実装して作成したスレッドを停止する方法はありますか?
- 27. 他のスレッドが実行されていないときに複数のスレッドを実行しますか?
- 28. インターフェイス開発をどこから始めるのですか?
- 29. C++スレッドとしてスレッドを使用
- 30. WebViewのUIスレッドとHTTPスレッドを分けることはできますか?
をarbitaryデータを渡すことができるように
userInfo
プロパティを追加することができます.phpしかし、これは私がオブジェクトとの通信を妨げる+機能を使用します。私はいくつかのグローバル変数とポインタをプロキシとして使用すると宣言しましたが、動作しますが、coreplot関数を呼び出すと処理が遅くなり、スレッドが終了するまで何もリフレッシュしません。私は関数を使ってみましたが、何も起こらず、ブレークポイントにも反応しません。私は、私は、下のsuggerstionsを見ていると思う –