問題タブ [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 に答える
901 参照

ios - Runloop は常に XPC 接続を中断させますか?

こんにちは、アプリがバックグラウンドに入るときにランループを追加すると、XPC 接続が中断されることに気付きました

たとえば、BLE デバイスへの私のアプリ接続では、ユーザーがアプリをしばらくの間バックグラウンドに入れた場合、接続を解放するよりもアプリを終了します

これが私のコードです

しかし、 foreground に入るたびに、実行ループを削除するとわかりました

アプリが実行されます

しかし、 Runloop を追加すると、

XPC 接続が中断されました

Runloop とアプリのライフサイクルの関係がわかりません???

また、アプリを十分な時間バックグラウンドに入れた場合、アプリは終了しますが、アプリを再度開くよりもすべて問題ありません。

****** アップデート ******

これが私が使用する最終的なコードであり、正常に動作し、クラッシュはありませんが、プロジェクト設定を変更したためかどうかはわかりません...それはずっと前の問題でした

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

ios - UndoManager 実行ループのグループ化は、異なるスレッド コンテキストでどのように影響を受けますか?

TLDR:UndoManagerバックグラウンド スレッドから使​​用する場合、実行ループに基づく自動取り消しグループ化がどのように影響を受けるか、およびこれに対する私の最良のオプションは何か疑問に思っています。


iOS と macOS の両方をターゲットとするカスタム Swift フレームワークでUndoManager(以前は)を使用しています。NSUndoManager

フレームワーク内では、かなりの量の作業がバックグラウンドの GCD シリアル キューで行われます。UndoManager実行ループ サイクルごとに最上位の登録済み取り消しアクションが自動的にグループ化されることは理解していますが、さまざまなスレッド状況がそれにどのように影響するかはわかりません。

私の質問:

  • UndoManager次の状況は、登録された元に戻すアクションの実行ループのグループ化にどのような影響を与えますか?
  • 元に戻す登録を必要とするすべての変更が単一のバックグラウンド シリアル ディスパッチ キューで行われると仮定すると、自然なグループ化を提供するのに理想的な状況 (実行不可能な状況 1 を除く) はどれですか?

以下のすべての状況では、and は空想的ではないと仮定methodCausingUndoRegistration()anotherMethodCausingUndoRegistration()UndoManager.registerUndoディスパッチなしで呼び出されたスレッドから呼び出します。

状況 1: メインスレッドでのインライン化

私の理解:これは、UndoManager使用されることを期待する方法です。上記の両方の取り消し登録は、同じ実行ループ サイクルで行われるため、同じ取り消しグループに配置されます。

状況 2: メインスレッドでの同期ディスパッチ

私の理解: 明らかに、同期ディスパッチはほとんどの状況で優れたアイデアではないため、このコードを本番環境で使用したくありません。ただし、タイミングを考慮して、これら 2 つのアクションが別々の実行ループ サイクルに配置される可能性があると思います。

状況 3: メインスレッドでの非同期ディスパッチ

私の理解: これが状況 1 と同じ効果を生み出すことを望んでいますが、これが状況 2と同様の未定義のグループ化を引き起こす可能性があると思います。

状況 4: バックグラウンド スレッドでの単一の非同期ディスパッチ

私の理解: がこの同じバックグラウンド キューから排他的に使用されている限り、これが状況 1と同じように動作することを本当に願っています。UndoManagerただし、特にGCDキュー(またはそのマネージドスレッド)が常に(あるとしても)実行ループを取得するとは思わないため、グループ化が未定義になるいくつかの要因があるのではないかと心配しています。

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

python - Ctrl+C が押されるとすぐに実行される SIGINT ハンドラを登録する方法は?

AppKit の PyObjC バインディングを使用する Python スクリプトを作成しています。スクリプトはオブザーバーを shared に登録し、通知を処理するために AppKit.CFRunLoopRun() を呼び出しますNSWorkspacenotificationCenter

私が経験している問題 (上記の MCVE で再現可能) は、スクリプトを実行しているターミナル ウィンドウで Ctrl+C を押すと、handle_interrupt() がすぐに実行されず、次回NSWorkspaceDidActivateApplicationNotification通知が処理されるときに実行されることです。

Ctrl+C / SIGINT が発生したらすぐに応答するにはどうすればよいですか?

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

ios - popToRootViewController を呼び出して tabBarController selectedIndex を設定すると、ポップされた VC が同じ実行ループで viewDidDisappear を呼び出さなかった

ルート タブバー VC とナビゲーション VC があり、タブバー インデックス 0 に 1 つのホーム VC があり、タブバー インデックス 1 に別の VC があります。

今、私は 1 つの subvc にプッシュしています。この subvc は上記の homevc に表示されています

次に、ボタンを使用してこの subvc をポップアウトし、使用して homevc に戻り、popToRootViewControllerすぐにインデックス 1 の vc に移動します。

ここでの問題は、ルートへのポップ後にインデックス 1 VC に移動しなかった場合、subvc がポップviewDidDisappearされ、通常どおりに呼び出されることです。ただし、ポップ後にルート タブバーのインデックス 1 または他のインデックスに移動すると、 root に対して、subvc はviewDidDisappearポップされているときに呼び出されませんでした。

私の説明がわかりにくいので、コードは次のとおりです。

ご覧のとおり、違いは、サブ VC を呼び出すことができないself.selectedIndex = 1;原因だけです。viewDidDisappear

しかし、私は以下のような解決策を得ます:

では、その背後にある根本的な原因を誰が説明できますか?

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

runloop - performSelector:onThread make runloop を終了しました

ここに画像の説明を入力します performSelector:onThread 実行ループを終了しますか? 私はランループを観察しようとします。私が触れると、終了ハンドル performSelector:onThread の後にランループが終了し、タイマーが機能しなくなります。理解できません