當屏幕處於活動狀態時,我的應用程序正常工作,但屏幕鎖定或睡着時,某些代碼似乎無限期地暫停應用程序,而沒有遇到問題實際上是崩潰。Xcode在沒有崩潰的情況下停止運行
該應用使用AVAudioPlayers和boost :: threads播放一些音樂曲目。當曲目結束時,必須調用大量設置才能準備新曲目。與此同時,應用程序必須暫停幾秒鐘。這個並行活動是通過boost :: threads實現的。
當屏幕處於活動狀態時,這一切正常。但是,當屏幕處於非活動狀態時,不會播放新曲目。沒有崩潰,並且使用斷點進行調試,似乎應用程序只是掛在特定行上 - 行從調試會話變爲調試會話 - 並且被卡住了。從來沒有我希望有EXC_BAD_ACCESS - 但沒有任何東西。沒有暗示爲什麼代碼掛起。
難道是我的主線程被阻塞了嗎?我使用了一些performSelectorOnMainThread調用,但是當使用applicationWillResignActive鎖定屏幕時,我已經停用了它們。但是,這並沒有解決問題。
升壓::線程,它似乎掛如下:
void MyClass::loopThread(int waitSeconds)
{
loopScheduled = true;
sleep(waitSeconds);
if (loopScheduled == true) {
if (engine_isRunning()) {
joinEngineThread();
}
startEngineThread();
((CPlusPlus*)m_obj)->markAsPlaying();
}
}
似乎流連
if (loopScheduled == true) {
線。
在這個線程中發生了什麼是其他並行線程可以在sleep()調用期間將loopScheduled設置爲false,並且如果loopScheduled爲false,則不會調用後面的方法。
但是,就我遇到的問題而言,loopScheduled應該是不相關的 - 它不會被任何其他方法設置爲false,並且在sleep()調用之後仍然是true。
有沒有人有任何想法會發生什麼?
謝謝。由於問題的性質,很難知道要發佈什麼,因爲問題似乎在不同的地方出現。但是,我編輯了我的問題以包含代碼經常掛起的boost :: thread代碼。 – user1295558