問題タブ [cfrunloop]

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 投票する
2 に答える
3806 参照

c++ - 別のスレッドからCFRunLoopStopを呼び出しても安全ですか?

私の(主にPOSIX)アプリケーションのMacビルドは、CFRunLoopRun()を呼び出してイベントループを実行する(MacOSからネットワーク構成変更イベントを取得する)子スレッドを生成します。

荷造りして立ち去るとき、メインスレッドは子スレッドの実行ループでCFRunLoopStop()を呼び出します。その時点で、CFRunLoopRun()は子スレッドに戻り、子スレッドは終了し、メインスレッド(子スレッドが終了するのを待つブロッキング)は続行できます。

これは機能しているように見えますが、私の質問は次のとおりです。これは安全で推奨される方法ですか?特に、別のスレッドからCFRunLoopStop()を呼び出すと、競合状態が発生する可能性がありますか?私が知る限り、Appleのドキュメンテーションはこの件に関して沈黙している。

メインスレッドからCFRunLoopStop()を呼び出すことが解決策ではない場合、良い解決策は何ですか?子スレッドにCFRunLoopRunInMode()を呼び出して、ブール値などをチェックするために頻繁にウェイクアップさせることができることは知っていますが、回避できる場合は、子スレッドにポーリングを行わせたくありません。

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

iphone - NSTimerはUIApplicationなしでは機能しませんか?

UIKitにまったく依存しないカスタムiPhoneアプリケーションがあります(UIKitにリンクされていません)。これは、UIApplicationを使用していないため、 UIApplicationMainを呼び出していないことを意味します。

問題は、タイマーを作成しても起動しないことです。タイマーは次のように作成されます。

「 main()」で基本的な初期化を完了した後、次のように実行すると、問題が実行ループに関連している可能性があると思われます。

UIKitをリバースエンジニアリングしたところ、UIApplicationがシステムイベントの登録など、はるかに多くのことを実行していることに気付きました。NSTimerはそれらの1つに依存している可能性があります。私が気付いたもう1つのことは、UIApplicationのデリゲートでは、スレッドがmain()と同じであるということです。

NSTimerを正しく動作させるにはどうすればよいですか?実行ループに関連している場合、誰かがエラーを指摘できますか?「CFRunLoopRun()」は、アプリケーションの残りの部分を実行できるようにメインスレッドを切断するために使用されます。私はそれが正しいとは思いません。

編集:実行ループを構成する必要があると思います。何とかして ...

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

iphone - CFRunLoopSource のループ

ここに私が現在開発しているソースファイルがあります。このクラスの背後にある考え方は、scheduleInCFRunLoop に渡されたCFRunLoopで呼び出されるターゲット オブジェクトとセレクターを含めることです。iPhoneで利用可能なすべての処理時間を消費せずに繰り返しループするには、これが必要です。完了に関するヘルプは最も役に立ちます。カスタム CFRunLoop ソースに関する役立つ情報を見つけるために 1 日中インターネットをサーフィンしましたが、このクラスを完了するのに役立つ情報はまだ見つかりません。

RunLoopContext.h

RunLoopContext.m

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

iphone - iPhone のカスタム CFRunLoop で録音コールバックを呼び出す方法

iPhoneでオーディオを録音しています..

これは私の Audio Queue オブジェクトです

しかし、これを別の RunLoop で実行したい..カスタム CFRunLoop を作成するにはどうすればよいですか? 助けてください..よろしくお願いします。

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

objective-c - GUIをフリーズせずにAudioQueueを再生するには?

CoreAudio ブック (ラフ カット) から AudioQueues について学び始めたところです。基本的にAppleチュートリアルの例と同じです。すべてが正常に機能しています。

GUI を使用してアプリにコードを実装しようとすると、問題が発生します。コードを NSObject サブクラスの「init」メソッドに貼り付けてテストしました。キューにコールバックを実行させる唯一の方法は、空の DO...WHILE ループを init の最後に挿入することですが、それによって GUI がフリーズします (明らかに...)!!

どうやら、AudioQueueNewOutput が inCallbackRunLoop および CallbackRunLoopMode 引数に NULL を渡されている限り、AudioQueue は独自の別のスレッドで自動的に実行されるはずです。それは起こっていません。バッファのプライミングから 1.5 秒しか聞こえません。

明らかに、物事がどのように機能するかについて、私が理解していない基本的なことがあります...

カスパー

0 投票する
6 に答える
2057 参照

ios - iPhoneのクラッシュ、ASIHTTPRequestまたはNSURL関連

次のシンボリッククラッシュログを考えると、クラッシュはスレッド5のASIHTTPRequestまたはスレッド3のNSURLConnectionが原因で発生した可能性が高いですか?この質問にも同様の問題があるため、質問します:リクエストが終了したときのASIHTTPRequest、EXC_BAD_ACCESS

ただし、ASIHTTPREquestのクラッシュについてはもっと多く、スレッド3にありましたが、私のNSURLConnectionはスレッド3にあり、他よりも多くの情報があります。

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

iphone - バックグラウンドでデータをロードしながらUIイベントを消費する方法

Webサービスからデータをロードする小さなiPhoneアプリがあります。データの読み込み中に問題が発生しないことを確認するために、アプリ上に半透明のビューを作成し、CFRunloopRun()を使用して、すべてのデータがバックグラウンドで読み込まれるまで待機します。これはそのためのコードです:

これは正常に機能しますが、ロード後にどこかのボタンのクリックが再生されるため、ユーザーがダウンロードボタンを2回クリックすると、ダウンロードも2回実行されます。

シールドが削除される前にUIイベントを消費する方法についてのアイデア。

ありがとう-アンディ

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

objective-c - CFRunLoopRun()およびNSTimer->セグメンテーション違反

私を助けてくれている人に事前に感謝します。

私は単純なデーモンを持っています。クラスを割り当ててから、スケジュールされた繰り返しのNSTimerを開始します。

次に、CFRunLoopRun()を呼び出して、デーモンが存続するようにします。

ここで問題となるのは、タイマーが起動した後、セグメンテーション違反が発生することです。bt:

タイマーを開始する他の方法も機能しませんでした。例えば:

誰かが(wr)on(g)で何が起こっているのか考えていますか?

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

iphone - NSTimer setFireDate

タイマーがスケジュールされているスレッドとは別のスレッドから setFireDate: を呼び出すことは、スレッドセーフと見なされますか? つまり、この関数を新しいスレッドで切り離します。

[timer setFireDate:]メインスレッドから呼び出してもいいですか? それを禁止するドキュメントには何も見つかりませんでした...

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

iphone - CFNetwork、CFReadStreamOpen、およびCFRunLoopRunに関する混乱

何が起こっているのかわからないことに気付いたときのその沈む感じ...

私はこのコードをネットワークコードでほぼ2年間問題なく使用しています。

私はそれがもともとここに与えられたコードサンプルに基づいていたと信じています:

http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/CFNetwork/CFStreamTasks/CFStreamTasks.html

ただし、最近、CFReadStreamOpenがfalseを返すが、エラーコードが0であるため、一部の接続が失敗していることに気付きました。上記のリンクをもう少し見つめた後、CFRunLoopRun()ステートメントに気づき、次のように追加しました。

これにより、接続の問題が修正されました。しかし、私のアプリはランダムな問題を示し始めました-インターフェイスが応答しない、または描画されない、テキストフィールドが編集できない、そのようなものです。

私はCFReadStreamOpenと実行ループについて読みました(具体的には、メインの実行ループはそれ自体で実行され、セカンダリスレッドで自分で設定しない限り、実行ループを実行するべきではありません-私はそうではありません、私の知る限りでは)。しかし、私はまだ上で実際に何が起こっているのかについて混乱しています。具体的には:

1)CFReadStreamOpenがFALSEとエラーコード0を返すことがあるのはなぜですか?それは実際にはどういう意味ですか?

2)CFRunLoopRun呼び出しは、上記のコードで実際に何をしますか?サンプルコードがその呼び出しを行うのはなぜですか?このコードがメインスレッドで実行されている場合、実行ループを実行する必要はありませんか?