我正在使用objective-c编写一个ssh包装器,我正在尝试实现一个命令应该执行的maxTime。我实现它的方式是:
主线程
AsyncThread:
在C#中,我使用ManualResetEvents向MainThread发出信号,取得了很大的成功。在Objective-C中,我能找到的最接近的类是NSCondition,但似乎它不是为线程间通信而构建的。
事实上我得到了:
2012-05-22 00:31:05.761 libssh2-for-iOS [60821:11303] ** - [NSCondition 解锁]:条件('(null)')解锁 没有锁定它的线程
2012-05-22 00:31:05.763 libssh2-for-iOS [60821:11303] **打破 _NSLockError()进行调试。
当我尝试使用它时。是否有另一种方法可以使用NSCondition或更好的方式让线程在收到某种信号之前进入睡眠状态?
答案 0 :(得分:5)
好的,事实证明我几乎是对的。我的问题(正如编译器轻易提到的那样)是我在一个线程中锁定并在另一个线程中解锁。真正解决它的是学习NSCondition中的“信号”方法。所以现在我已经重写了代码:
工人#1主题:
[NSCondition lock]
start worker thread
if([NSCondition waitUntil:maxTime])
// got signal
else
// timed out
[NSCondition unlock]
工人#2主题:
Do work
[NSCondition signal]