問題タブ [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.
ios - Audio Queue Playback コードで CFRunLoopRunInMode() を呼び出すのはなぜですか?
iOSの「Audio Queue Programming Guide - Playing Audio」に従っています。ガイドの最後近くにCFRunLoopRunInMode()
あるステップStart and Run an Audio Queueに への呼び出しがあります。
行 6 に関するドキュメントには、「CFRunLoopRunInMode 関数は、オーディオ キューのスレッドを含む実行ループを実行します」と記載されています。しかし、私のメソッドが戻ったときに実行ループが実行されていませんか? 上記のコードは、アプリで再生ボタンを押すと、メイン スレッドによって実行されます。
これらの呼び出しが何に役立つのか理解するのに苦労していますCFRunLoopRunInMode()
。なぜなら、再生ボタンが正しく更新されないという欠点があり (オーディオが再生されている間ずっと押し下げられているように見える)、肯定的なものがないからです。つまり、コードから do-while-loop を呼び出しとともに削除しCFRunLoopRunInMode()
、代わりにこのメソッドから直接返すと、オーディオもうまく再生されます。これは、問題が発生しないため、これらの呼び出しを削除しておくという明白な解決策を示しています。オーディオ再生のためにiOSでAudio Queuesを使用することに関するAppleの公式ガイドにこのコードが含まれている理由を誰かが説明できますか?
編集:
Mac OS X には、iOS と同じオーディオ キュー API が存在し、iOS のガイドはMac OS ガイドのコピーと貼り付けの複製のようです。これにより、実行ループへのこれらの呼び出しは Mac OS でのみ必要であり、iOS では必要なくなったという疑いが生じます。たとえば、そうしないと Mac OS アプリケーションが終了するか、そのようなものになるためです。誰かがこれを確認するか、除外してもらえますか?
cocoa - NSRunLoop を停止する
スレッドに接続があるので、それを実行ループに追加してすべてのデータを取得します。
でも止める方法が見つからない
どうすればこのループを止めることができますか?
iphone - アプリケーションがバックグラウンドに入ったときにソケット操作を行う方法は?
会議関連のアプリケーションを開発中ですが、アプリケーションがバックグラウンドになった後、ソケットを介してパケットを送受信することはできますか? 私はググって、以下のような方法を見つけました....
CFRunLoopRun がここで行っていること。それがうまくいくなら..どうやって?よくわかりません。ここからどこへ行けばいいのか教えて...
ありがとう。
macos - 「実行ループにジャンプ」できますか?
私は、xCode を使用した最初の主要な OSX アプリケーションの生産段階に入りました。これは、さまざまな API 呼び出しを開始する多数のボタンを使用して eBay にアクセスし、結果を解析して表示する e コマース アプリです。かなり大きくなり、私の最初の xCode アプリで想像できるように、コード構造は最適ではありません。しかし、それは現在生産中であり、私は大規模なリストラの危険を冒したくありません.
私の質問は次のとおりです。コードにはいくつかのポイントがあり、多数のメソッド呼び出しが深く、実行ループに戻ってボタンが押されるのを待ちたいところです。そこに到達するために必要なすべてのリターンを行うことは、現時点では実用的ではありません。
実行ループを「GOTO」する方法はありますか?
ありがとう!
objective-c - Cocoa アプリケーションでの実行ループの問題 (部分的にフリーズした UI) の診断
私たちのアプリケーションはかなり標準的なレイアウトを持っています - ツールバー付きのメインウィンドウ、左側にソースリスト、そしてタブコントロールです。タブのコンテンツは、オープン ソースで非常に複雑なサード パーティ コンポーネントによって描画されます。スレッドなどを多用しています。
一部のユーザーは、アプリケーション全体が「フリーズ」する状況、つまりメイン ウィンドウの再描画が停止する状況を確実に再現できます。カーソルはビーチボールせず、ユーザーは引き続きクリックできますが、ウィンドウは単に更新されません。
アプリケーションの使用を開始し、1 つまたは複数のタブを開くと、数分以内に問題が発生する以外に、特定の再現手順はありません。
画面の上部にあるアプリケーション メニューを開くことができます。メニュー項目の 1 つである [更新の確認] は、バックグラウンド スレッドで更新を確認しながら、モーダル セッション (進行状況インジケーター付きのシート) を開始します。
アプリケーションがこの「フリーズ」状態にある場合、[更新の確認] を選択すると、モーダル セッションの間、アプリケーションのフリーズが解除されたように見えます。フリーズ中に行われたクリックとボタンの押下は、UI が再描画されると突然登録されます。
次に、「更新の確認」が終了し、モーダル セッションが終了し、アプリケーションが再びフリーズします。
実行ループに問題があるようです。これは自由回答形式の質問ですが、正直なところ、どこを見ればよいかわかりません。この種の症状の原因は何ですか? この問題が発生しているユーザーのハードウェア/ソフトウェア間の相関関係を確認できません。
編集
フリーズした後、コンソールに表示される説明できない唯一のことは
しかし、これは赤ニシンだと思います。
フリーズ時のプロセスのサンプルは、UI スレッドについてこれを示しています。
しかし、その情報を解釈することはできません...
編集2
追加のサンプル; 最初のものとは明らかに異なります:
swift - Swift コマンド ライン プログラムでの CFRunLoop
ソケットがデータを受信したときに特定のアクションを完了するために、(コードを正しく理解していれば) GCD コールバックに依存するサードパーティ フレームワークを使用して、Swift でコマンド ライン アプリケーションを作成しています。フレームワークをよりよく理解するために、フレームワークの作成者がフレームワークに合わせて作成した Cocoa アプリケーションのサンプルを試してみました。
サンプル アプリケーションは Cocoa アプリケーションであるため、実行ループは自動的に処理されます。サンプル アプリケーション (MIT ライセンス) のコード スニペットを含めて、どのように機能するかを示します。
...
...
サンプル アプリケーションをコマンド ラインから実行するように変更したいと考えています。startServer() 関数をコマンド ライン アプリケーションに入れると実行されますが、ソケットは開かれた直後に閉じられ、プログラムは終了コード 0 で実行を終了します。実行ループがないため、これは予想される動作です。 Xcodeコマンドラインプロジェクトでは、プログラムはソケットがデータを受信するのを待つことを知りません。
ソケットを開いたままにし、プログラムを継続的に実行する正しい方法は、メインスレッドを CFRunLoop に入れることだと思います。私は Apple のドキュメントを調べましたが、基本的な API リファレンスを除いて、Swift でのスレッド化については何もありません。サードパーティのリソースを見てきましたが、それらはすべて iOS および Cocoa アプリケーションの代替スレッドに関係しています。メインスレッドに CFRunLoop を適切に実装するにはどうすればよいですか?