web-dev-qa-db-ja.com

EXC_RESOURCEによるアプリのシャットダウン、iOS 8でのWAKEUPS例外GM

誰もがiOS 8でこの種の例外が何であるか知っていますか?

===クラッシュレポートから===

Exception Type: EXC_RESOURCE
Exception Subtype: WAKEUPS
Exception Message: (Limit 150/sec) Observed 206/sec over 300 secs
Triggered by Thread: 14

IOS 8でのみ発生するようです...この例外を除き、アプリは任意の間隔で非常にランダムにシャットダウンされます。

手がかりは大歓迎です。ありがとう!

47
Coder

アプリは、アプリ内の特定のスレッドにウェイクアップコマンドを頻繁に送信しています(明らかに1秒間に平均206回)。 iOS 8のバックグラウンドスレッドには、1秒間に各スレッドでスリープ/ウェイクサイクルを実行できる回数に厳しい制限があり、ここでカウントが多いことは、通常、スレッド管理で何かが間違っている/非効率であることを示しています。

コードを見ずに、C++アルゴリズムのスリープ/スリープ解除呼び出しをチェックするか、バックグラウンドプロセスをマルチスレッドして各サイクルで新しいスレッドを開始することをお勧めします。

Ray Wenderlichには、マルチスレッド用のAppleのシステムであるGrand Central Dispactchに関する素晴らしいチュートリアルがあります。これは、あなたにとっても良いリソースかもしれません: http://www.raywenderlich.com/60749/grand-central-dispatch-in- depth-part-1

19
Ryan Kreager

Xamarinを使用すると、この問題も発生しました。同時に長時間待機している4つのSemaphoreSlimを使用していました。 SemaphoreSlimを他のプリミティブ同期(この場合は1アイテムのSemaphoreをシミュレートするAutoResetEvent)に置き換えると、問題が修正されました。

2
Alexandre Emond

私のiOS 9.1の場合、これはスレッド2によってトリップされます。スレッド2は、GLESドライバーがプロジェクトソースを検索するためのワーカーのようです。GPUToolsへの参照は表示されません。

Thread 2 name:  gputools.smt_poll.0x145722df0
Thread 2 Attributed:
0   libsystem_kernel.dylib          0x000000019a8b7440 __semwait_signal + 8
1   libsystem_c.dylib               0x000000019a7c9e2c nanosleep + 212
2   libsystem_c.dylib               0x000000019a7c9d4c 0x19a7bc000 + 56652
3   GPUToolsCore                    0x0000000100ba0ae0 0x100b98000 + 35552
4   libsystem_pthread.dylib         0x000000019a97fb28 _pthread_body + 156
5   libsystem_pthread.dylib         0x000000019a97fa8c _pthread_body + 0
6   libsystem_pthread.dylib         0x000000019a97d028 thread_start + 4

これを参照してください: iOS 7およびOpenGLの問題/クラッシュ Appleにバグ23389472を提出しました。私の場合、これは私またはサードパーティのコードが作成したスレッドではないため、おそらく私のバグではありません。要するに、問題のスレッドが自分のもの(明らかにサードパーティのソフトウェアを含む)である場合、ライアンの答えが当てはまります。それ以外の場合は、Appleに連絡するか、またはその間に回避策を探す必要があります。

0
Anton Tropashko