問題タブ [nsrunloop]
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.
objective-c - NSRunLoop は NSTimer と任意の入力でフリーズします
何らかの理由で、任意のコントロールを押し下げる (クリック アンド ホールド) と、アプリの NSTimer がフリーズし、マウス ボタンを離すまで起動しません。マウスを押している間は起動しません。これは短時間なら問題ありませんが、ポップアップ メニューを開いたり、コンボ ボックスをドロップダウンしたりするとフリーズします。
見落としがあるかどうかはわかりませんが、これは間違った動作のようです。
NSTimer 全体がフリーズする (NSView を再描画する) ことなく、NSPopUpButtonCell の下矢印をクリックする (または NSTableView をクリックしたままにする) ことができるようにしたいと考えています。
コメント/提案をいただければ幸いです。
NSTimer は、モード NSDefaultRunLoopMode で currentRunLoop に追加されます。
iphone - デバイスがロックされている間に起動するNSTimer
現在、アラームを作成しています。NSTimer を使用してアラームをスケジュールします。私の問題は、デバイスがロックモードになったときに NSTimer が起動しないことです。ロックするとアプリがサスペンド状態になるので、NSTimerが起動しないと思います。問題の解決策を見つけるのを手伝ってもらえますか?
UIBackgroundModes に関するトピックをいくつか見つけましたが、それがどのように役立つかわかりません。
ありがとう..
UILocalNotification の問題は、デバイスがサイレント モードの場合、音が聞こえないことです。私の実装は、アプリがフォアグラウンドにあるとき、またはデバイスがロックされているがアプリが現在実行中のときに、NSTimer を使用してアラームを発生させることでした。applicationDidEnterBackground: が呼び出されると、UILocalNotification をアラームとしてスケジュールします。
iphone - iPhone のセカンダリ スレッドで AsyncSocket を使用する
iPhone で AsyncSocket を使用してサーバーと通信します。AsyncSocket は実行ループに基づいていますが、私のアプリはスレッドに基づいています。つまり、新しいスレッドを開始してデータを書き込み、同じスレッドで応答が受信されるまで待ちます。しかし、別のスレッドから AsyncSocket のメソッドを直接呼び出すことはできません。使用する必要があります。
それは機能しますが、この方法で呼び出されたメソッド「writeSomeData:」からの応答を取得できません。
メソッド writeSomeData: は、次のようなことを行います。
クラス変数「dataReceived」にアクセスしてレスポンスを取得できましたが、今回は内容が変更されています。
別のスレッドで AsyncSocket を使用する方法 (または、一般的に実行ループ ベースのクラスを処理する方法) を教えてもらえますか?そのクラスのメソッドを呼び出すと、メソッドが実行されて応答が受信されるまでブロックされますか?
ありがとうございました。
iphone - -[NSRunLoop runUntilDate:] を呼び出すのは良い考えですか?
に電話するのは一般的に良い考え-[NSRunLoop runUntilDate:]
ですか?問題なく動作しているように見えますが、実行ループ内から実行するように実行ループに指示するのは緊張します。
より詳しい情報:
現在、REST サービスからデータをフェッチするプロジェクトがあります。取得する必要がある重要な情報の 1 つは、有効なデータを含む日付の範囲です。これは非常に小さなデータで、一度だけ取得する必要があるため、これを処理する最善の方法は、ローカル変数がnil
. 私は と を使用ASIHTTPRequest
しているASINetworkQueue
ため、デフォルトではすべてが非同期であり、これが機能するためには、データがダウンロードされて処理されるまで、このプロパティを返すことはできません。これが私のコードの概要です。変数の名前は、罪のない人を保護するために変更されています。
繰り返しますが、これはうまく機能しているようです。このアプローチを使用する際に潜在的な問題はありますか?
iphone - NSRunLoopのタイミングの問題
もっと良い方法があるかもしれませんが、ユーザーがUIalertViewのボタンをタップしたときに選択リストをポップしたいと思います。アラートビューが表示されている間にこのリストをポップし、ユーザーが選択リストの項目をタップしたときにすべてを閉じたいと思います。
リストをUIAlertViewにサブビューとして追加し、選択リストで設定されたフラグでポップするwhileループでUIalertViewをNSRunLoopで表示したままにすることでそれができると思いました。ただし、whileループがNSRunLoopに戻る前にフラグが設定されないため、これを機能させることはできません。2回タップすると、whileループから外れますが、それは私が望んでいることではありません。
popUpPicker.tagを、ユーザーがリストのtableView:didSelectRowAtIndexPath:メソッドでタップした行に設定しています。このメソッドは、リストデリゲートメソッドを呼び出します。
ポップアップリストを正常に動作させることができますが、UIAlertViewを閉じた後でのみです。
助けてくれてありがとう。
ジョン
cocoa - 非同期SOAPWebサービス呼び出しが機能しない理由
WSMakeStubs(開発ツール内)を使用して、SOAPWebサービスにアクセスするためのスタブコードを生成しました。オブジェクトに対して行った呼び出しは、現在ブロックされています。非同期呼び出しを使用しようとしても何も起こらず、実行ループの理解に関係していると確信しています。オブジェクトを初期化し、次のような実行ループでスケジュールしようとします。
実行ループでのスケジューリングのスタブ呼び出しは次のようになります。
[self getRef]を呼び出すと、コールバックを設定した呼び出しオブジェクトが返されます。次に、コールバックはターゲットとセレクターを呼び出すことになっていますが、実行ループを使用してスケジュールを呼び出した後、そのブレークポイントに到達することはありません。実行ループのスケジューリングを正しく機能させるには、何を変更する必要がありますか?
同期呼び出しは正常に機能するため、サーバーの問題ではないと確信しています。
iphone - NSRunLoop と GCD キュー
私は iOS で使用するための C++ ライブラリを作成しています (はい、残念ながら C++ でなければなりません)。AVCaptureSession を使用して、captureOutput コールバックを介して配信されるビデオ フレームをキャプチャします。C++ ライブラリは私の成果物です。テスト/デモ用のココアタッチアプリケーションがあります。したがって、次のようになります。
(テストアプリ) <-----> (c++ lib(AVFoundation コールバック))
テスト アプリには UI コントロールがあり、ほぼすべてのグラフィックを担当します。C++ ライブラリは、フレームを OpenGL 経由で UIView にレンダリングします。
私と一緒にいますか?良い
さて、まず、ユーザーは私のライブラリを呼び出す UIButton を押します。この呼び出しが完了するまでに 10 秒以上かかります。したがって、ボタン クリックの直後に呼び出しを配置すると、ライブラリ関数が戻るまで UI がブロックされます。
これはダメです。次に試したのは、スレッドを生成して lib を呼び出すことでした。
これにより UI がブロックされることはなくなりましたが、ビデオ フレームのコールバック関数が起動することはなくなりました (AVCaptureSession の captureOutput)。メインの NSRunLoop がブロックされているようです。
次に、同じことを試しましたが、Grand Central Dispatch を使用しました。
これは同じ動作をします。つまり、ビデオ フレームのコールバックは発生しません。ラメ
2 番目と 3 番目のケースでメインの NSRunLoop がブロックされるのはなぜですか? キューを関連付ける方法はありますか?
これは理にかなっていますか?
cocoa - aysnchronous NSURLConnections はマルチスレッド化されていますか
NSURLConnection を作成してリクエストを発行すると、すべてがうまくいくことに気付きました。デリゲート メソッドが呼び出され、接続を呼び出すコード ブロックが完了した後、最後のデリゲート メソッドが呼び出されます。偉大な。
これにより、接続が非同期であり、マルチスレッドであることを意味すると思います。あれは正しいですか?それらは非同期ですが、同じスレッド内にありますか? いいえ、それはおかしいですよね?
しかし、NSOperation を使用して私が見たすべての例では、NSURLConnections は常に ScheduledInRunLoop であり、その後 [runLoop runMode ...] が while ループで呼び出されます。
誰かがここで何が起こっているのか正確に説明できますか? 最初のケースではセカンダリスレッドを生成する必要がありますが、(これらのスレッドで) 実行ループを手動で呼び出す必要はありませんが、NSOperation (新しいスレッドで) では実行ループを手動で呼び出す必要があります。
最初のケースで手動呼び出しが必要ないのはなぜですか?
cocoa - NSOperation または NSRunLoop を使用する必要がありますか?
FireWire カメラからのビデオ出力のストリームを監視しようとしています。ボタンとNSImageView
. 画像監視が無限ループ内で発生している間、次のことを行います。
- その場でいくつかのカメラ パラメータを変更します (ゲイン、ガンマなど)。
- 監視を停止するように指示して、画像をファイルに保存できるようにします (while ループを停止するフラグを設定します)。
ボタン機能を使用して、ビデオ フレーム モニターをループすることができませんでしたが、ボタンの押下をまだ探しています (C の keypressed 機能を使用するのと同じように)。2 つのオプションが表示されます。
- 新しい実行ループを開始します(autoreleasepoolを機能させることができません...)
- 開始
NSOperation
- Xcode ボタンを押して接続できるようにするにはどうすればよいですか?
ドキュメントは、そのようなオブジェクトの作成について非常に鈍いです。私が見つけた例に従ってを作成するNSOperation
と、Interface Builder のオブジェクトと通信する方法がないようです。を作成するNSRunLoop
と、オブジェクト リーク エラーが発生し、作成した RunLoop に実際に応答する autoreleasepool を作成する方法の例が見つかりません。セカンダリ実行ループでサンプリングされるオブジェクトを選択しようとさえしていないことを気にしないでください...
Objective C は (明らかに!) 私の母国語ではないため、申し訳ありませんが、赤ちゃんのステップで解決策を探しています ... よろしくお願いします
cocoa - 実行ループベースの NSThread を不確定な時間スリープ状態にする
iOS アプリに専用のネットワーク スレッドがあります。スレッドの -main メソッドは次のようになります。
http 操作 (同時実行ループベースの NSOperation サブクラス) が取り込まれた NSOperationQueue があります。runloop スレッドを必要とする http 操作があることを知っているので、実行する作業がないときに runloop スレッドが実行されないようにしたいと考えています。NSRunLoop は、やるべきことがないときに自動的にスリープすることをどこかで読みました (参考になりました)。しかし、Instruments のタイム プロファイラーを使用したところ、runloop スレッドが常にアクティブであることがわかりました。
このリソースの浪費を防ぐために、NSRunLoop と NSThread の使用をどのように調整できますか?