問題タブ [runloop]

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.

0 投票する
1 に答える
12190 参照

cocoa - タイマーから NSRunLoop を停止する

カウントダウンを表示するラベルを更新するタイマーを使用して RunLoop を作成しました。カウントダウンがゼロになったら RunLoop を停止する必要があります。タイマーが正常に終了した場合は、runUntilDate を使用できます。日付は現在の日付 + カウントダウンの時間です。問題は、ユーザーがカウントダウンが完了する前にボタンからキャンセルした場合です。RunLoop にキャンセル ボタン アクションから停止するように指示する方法がわかりません。RunLoop のコードは次のとおりです。

このメソッドは、各ループで 1 ずつ減らすようにラベルに指示するだけです。

キャンセル ボタンにラベルをゼロに変更するように指示し、実行ループ セレクターに値がゼロかどうかをチェックさせることはできますが、RunLoop 自体のセレクターに停止を指示することはできますか?

これらは私が見つけた最も近いものですが、RunLoops 独自のセレクター内からは機能しないようです。少なくとも、私が試した方法では機能しません。

基本的に、RunLoopに停止するようにボタンに指示するか、何らかの方法で独自のセレクターからRunLoopを停止する必要があります。

ありがとう。

0 投票する
1 に答える
486 参照

ios - iOS のメイン スレッド/実行ループをブロックしているものを見つけますか?

iOS アプリでメイン スレッドの実行ループをブロックしているものを見つける方法はありますか。たとえば、実行ループが呼び出して完了するのに 0.1 秒以上かかるすべての関数を見つける方法はありますか?

よろしく、ヨッヘン

0 投票する
2 に答える
273 参照

objective-c - FoundationTool のランループ

私は財団ツールを書いています。進行中のさまざまなタスクを分離するには、スレッド化を行う必要があります。

スレッド化を試みましたが、継続的にクラッシュしていました。そして最後に、独自の実行ループを実行する必要がある理由を突き止めました。

簡単な例を手伝ってくれる人はいますか?次のコードを試しましたが、うまくいきません。実行するたびに例外でクラッシュしますか? Foundation ツールでスレッドを実行するにはどうすればよいですか?

0 投票する
2 に答える
14142 参照

runloop - GCDAsyncSocket内のdidReadDataを現在のRunLoop内で実行するにはどうすればよいですか?

私はGCDAsyncSocketで動作する簡単な例を取得しようとしていますが、理解が不足していることを発見しました。すばらしい人々がこれを説明するのを手伝ってくれることを願っています。

以下にGCDAsyncSocketを設定しました。

そして、私のソケットテストサーバーアプリが文字列を受信するのを見ることができます

「テスト中...123... \ r \n」

しかし、ソケットテストサーバーに文字列を返送させると、didReadDataデリゲートが実行されることを素朴に期待していました

それでも、冷酷な現実は私が電話するまで私にそれを学ばせました

... didReadDataデリゲートは呼び出されません。

OK、それは大丈夫です。わかった。

ドキュメントをもう少し読むと、それは明確に次のように述べています

AsyncSocketは、RunLoopベースのTCPソケットライブラリです。

だから今、私はこのRunLoopのものを見ています。これは、私の見解では、MicrosoftWindowsのメッセージループのようなものです。iOSはイベント/メッセージ駆動型アーキテクチャ(Win32と同様)であるため、現在使用しているデフォルトのメインスレッドには、イベントを処理するための独自のmsgループがあります。

私の混乱は、iOS RunLoopが、GCDAsyncSocketを正しく機能させるために連携しなければならない別のエンティティのように見えることです。

実行ループモードのデフォルトセットがNSDefaultRunLoopModeであると述べている場合、これはメインスレッドにあります。

まだ混乱していますか?

したがって、Win32では、通信イベント処理コードは次のようになります。

もちろん、それは独自のスレッドにあります(GCDAsyncSocketを使用してまだそこに到達していません)が、それはある意味で独自の「RunLoop」になります。

[asyncSocket readDataWithTimeout]呼び出しでキューを埋めるポーリングループでスタックしないように、GCDAsyncSocketを使用して同じことを行うにはどうすればよいですか?

このライブラリを使用するには、より良い例が必要だと思います。

0 投票する
3 に答える
2839 参照

iphone - iOSでアプリがバックグラウンドにあるときにメソッドを呼び出すにはどうすればよいですか?

myClassCalculate には次のメソッドがあるため、クラス名は 1 つです。

でオブジェを作っています

アプリがバックグラウンドになると、これが欲しい

このメソッドがアプリのバックグラウンドで呼び出されるようにするにはどうすればよいですか

ありがとう

0 投票する
0 に答える
390 参照

ios - 「非公開 API」「無視」のため、iPhone アプリが拒否されました

公開されていない API、つまり無視を使用しているため、Apple は私のアプリを拒否しました。

アプリで XMPPFramework を使用しています。XMPPParser では、次のコード行が使用されます。

編集:この無視セレクターを使用してアプリを承認しないようにするにはどうすればよいですか?

0 投票する
2 に答える
1819 参照

objective-c - Runloopがdispatch_asyncからのイベントを処理していません

dispatch_asyncの使用に問題があります。アプリケーションのメイン/UIスレッドで、グローバルキューでdispatch_asyncを呼び出し、完了ハンドラーを持つ関数呼び出しを実行するように指示します。完了ハンドラーが呼び出されることを期待していますが、表示されない場合があります。

興味深いのは、テキストフィールドに何かを入力するたびに、controlTextDidChangeに応答してこれを実行していることです。 テキストフィールドをクリックすると、すべての完了ハンドラーが一度に起動します。

私の推測では、すべての完了ハンドラーが実行ループの背後でキューに入れられ、UI要素がフォーカスを失うと、キューが解放されます。テキストフィールドまたはコンボボックスに入力しているときに何が起こっているのかを正確に知るには、実行ループの専門家ではありませんが、おそらく実行ループを拘束しているのでしょうか。

編集:実行ループモードを印刷すると、デフォルトモードとして出力する場合の完了ハンドラーを除いて、NULLとして出力されるため、実行ループモードと関係があると思います。コンボボックスを使用していますが、この問題は、コンボボックスを開いて展開した場合にのみ発生します。 UIScrollViewブロックはループを実行しますか? 私はそれがこの問題に関係しているかもしれないと思います。皆さんはどう思いますか?

0 投票する
0 に答える
251 参照

iphone - アプリケーションがバックグラウンド モードで送信されるときに NSThread の実行を停止する

iPhoneアプリケーションで次の問題があります。

TCPソケットで動作するNSThreadがあります。このスレッドが非常に長い機能を実行している場合、アプリケーションをバックグラウンド モードで送信します。このバックグラウンド スレッドから戻ると、アプリケーションをバックグラウンドに持ち込む前に中断したところからスレッドが開始されます。そのメソッド (私のスレッド) の実行が完了していなくても停止する方法はありますか?

0 投票する
0 に答える
137 参照

macos - ココアでメインスレッドが停止しない

ファイルをftp、flickrなどにアップロードするデスクトップベースのアプリケーションをxcode4で開発しています。アップロード中にマルチスレッドを使用します。進行中のアップロード全体をキャンセルする必要があります。マルチスレッドは " performselectorOnMainthread" を使用して行われます。そのため、これらの実行ループをそれぞれメイン スレッドからキャンセルする必要があります。CFRunLoopStop(CFRunLoopGetMain());メイン スレッド自体をキャンセルするために" " も試しましたが、結果が得られません。

0 投票する
1 に答える
1115 参照

macos - バッファがいっぱいになるまで CFRunLoop 非ブロッキング待機

BT デバイスからデータを読み取るアプリを Mac に移植しています。Mac 固有のコードでは、-(void) rfcommChannelData:(...) のような BT コールバックのデリゲート メソッドを持つクラスがあります。

そのコールバックで、受信したデータでバッファーを埋めます。アプリから呼び出される関数があります。

私の問題は、この RunLoop がアプリ全体を非常に遅くすることです。デフォルト モードを使用せず、runlooptimer を使用して on runloop を作成すると、コールバック メソッド rfcommChannelData が呼び出されません。次のコードを使用して、1 つの実行ループを作成します。

デフォルトの RunLoop がアプリ全体を遅くする理由、または自分の実行ループを作成して rfcommchannel からのコールバックがトリガーされるようにする方法はありますか?

どうもありがとう、

アントン・アルバヘス・エイザギレ