私はココアのインターフェースを持っています。ボタンを押すといくつかのデータを処理したいのですが、動作している間はそのインターフェースを使い続けたいと思います。私は唯一の解決策は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. Javaスレッドの開始 - 停止同じボタンをクリックして開始
- 5. "this"をコンストラクタで使用してスレッドを安全に開始できますか?
- 6. IDEからFlinkを実行しているときにFlinkジョブマネージャのWebインターフェイスを開始するには
- 7. ボタンを押したときに遷移するインターフェイス
- 8. 別のスレッドを開始すると、アクティビティのスレッドは終了しますか?
- 9. IComparerインターフェイスはC#の別のスレッドで動作しますか?
- 10. OpenMPはスレッドを実行しますがメインを続ける
- 11. スレッドの内部スレッドからアンドロイドのアクティビティを開始します。
- 12. Xamarin.IOSアプリが多くのスレッドを開始して終了し続ける
- 13. マルチスレッド - すべてのスレッドが開始された後でのみ、スレッドの実行をrun()にします。
- 14. スレッドとスレッド開始
- 15. テキストエディタで各キー押しをあるスレッドから別のスレッドに渡すことはできますか?
- 16. は複数の実行スレッドで同時に操作を開始します
- 17. スレッドが開始パラメータを持つときにスレッドを開始して結合する
- 18. オブジェクトへのインターフェイスの受け渡し、またはCocoaでの委任の使用?
- 19. アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。
- 20. Android bluetooth:UIスレッドから開始されたスレッドはUIスレッドをブロックします
- 21. 上記のスレッドがConsole.ReadLineを実行しているときに、.NETで別のスレッドを中止する方法
- 22. (メッセージポンプを使用して)uiスレッドでデリゲートを実行します。
- 23. 公開されたリンケージプロパティとしてインターフェイスを使用します。
- 24. UIスレッド項目を使用して別のスレッドで関数を実行する
- 25. Objective-C++ GUIを使用したC++アプリケーションでCocoa GUIスレッドを見つけることができません
- 26. Pythonスレッドは、Thread.startを呼び出す前に実行を開始します。
- 27. CoClassAttributeを使用して(ab)インターフェイスのデフォルトの実装を提供することはできますか?
- 28. スレッドから新しいスレッドを開始する
- 29. "新しいスレッド"は新しいスレッドを開始しませんか?
- 30. Media Foundationを使用して所定の時間にスレッドを実行/開始する方法は?
をarbitaryデータを渡すことができるように
userInfo
プロパティを追加することができます.phpしかし、これは私がオブジェクトとの通信を妨げる+機能を使用します。私はいくつかのグローバル変数とポインタをプロキシとして使用すると宣言しましたが、動作しますが、coreplot関数を呼び出すと処理が遅くなり、スレッドが終了するまで何もリフレッシュしません。私は関数を使ってみましたが、何も起こらず、ブレークポイントにも反応しません。私は、私は、下のsuggerstionsを見ていると思う –