我有一段代碼調用了一個來自第三方庫regexKitLite的方法(即processRegex),它在一堆數據上運行正則表達式匹配。我正在使用performSelectorInBackground:在bg線程中運行此方法。我發現在某些情況下,如果數據無效或損壞,那麼processRegex方法會鎖定線程並陷入遞歸循環,這可能需要永遠回來,我想obv想避免。是否有可能使用定時器殺死後臺線程中的流氓方法?
我正在考慮使用基本上等待x時間的計時器,並且如果它在指定的時間過去之前沒有失效,則殺死正在運行該方法的bg線程。然而
我的問題是:
我不能啓動計時器在同一個線程的正則表達式的方法,因爲線程可以鎖定在試圖處理數據並難道不叫我的計時器,因爲我下面嘗試過。
// setup timer to restrict the amount of time a regex can take before killing it
myTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(resultProcessingTimedOut:) userInfo:nil repeats:NO];
resultsArray = [NSMutableArray arrayWithArray:[html arrayOfCaptureComponentsMatchedByRegex:]; // <-- could lock up thread!!
[myTimer invalidate];
其次,根據你要無效在同一個線程計時器蘋果文檔啓動它,我不能在自己的後臺線程啓動計時器,因爲IM不知道我怎麼會那麼無效呢?
最後,我怎麼會殺死正在運行正則表達式的線程,因爲你不應該終止線程。
關於如何處理這種情況的任何想法?
thx