2

我正在編寫一個ssh包裝器在objective-c中,我試圖實現一個maxTime命令應該執行。我實現它的方式是:我如何在指定的時間喚醒線程objective-c

主線:

  1. 計算超時
  2. 創建asyncThread(GCD隊列)來執行命令,並解析返回的數據
  3. waitForTimeoutOrSignal
  4. 返回結果

AsyncThread:

  1. 執行命令
  2. 得到返回的數據
  3. 如果接收到正確的數據信號MainThread

在C#我不得不使用ManualResetEvents信號的MainThread良好的成功。在Objective-C中,我能找到的最接近的類是NSCondition,但似乎它不是爲線程間通信而構建的。

事實上我得到:

2012-05-22 00:31:05.761 libssh2換-IOS [60821:11303] ** - [NSCondition 解鎖]:條件(「(空) 「)從 螺紋鎖打開,並沒有將其鎖定

2012-05-22 00:31:05.763 libssh2換-IOS [60821:11303] **上 _NSLockError()來調試中斷。

當我嘗試使用它。有沒有另一種方式來使用NSCondition或更好的方式讓線程休眠直到它收到某種信號?

+0

大約有18種方法(好吧,也許一個誇張,但是一個半打)發送某種類型的定時器事件給一個線程。但要知道的最重要的事情是主線程不應該等待。 –

回答

5

好吧,事實證明,我幾乎是正確的。我的問題(正如編譯器提到的那樣)是我鎖定了一個線程並在另一個線程中解鎖。真正解決的是在NSCondition中瞭解「信號」方法。所以,現在我正是如此改寫代碼:

工人#1主題:

​​

工人#2主題:

Do work 
[NSCondition signal] 
+2

在主線程中等待(超過幾毫秒)是一個禁忌。 –

+0

你是對的熱舔,已更新示例工人主題#1和#2 – whisperstream