是否有可用于Objective-C/Cocoa的.NET ManualResetEvent类的等价物?C#ManualResetEvent的Objective-C/Cocoa等价物
9
A
回答
8
我对ManualResetEvent不是很熟悉,但是based on the documentation,它看起来像the NSCondition class可能是您正在寻找的。
NSCondition绝不意味着完全相同,但它的确提供了类似的信号功能。您可能还想阅读NSLock。
0
啊,那些是穷人的条件变量。
你可以使用NSCondition
类,但我认为它是更好的
直接来源。从pthread_cond_init
开始。
你会喜欢它。
1
我给你我希望昨天找到的示例代码(但无法在任何地方找到)。如果要创建消费者异步的生产者/消费者类,则需要执行以下操作:
您需要声明并分配NSConditionLock。
NSArray * data = [self getSomeData];
if ([data count] == 0) {
NSLog(@"sendThread: Waiting...");
[_conditionLock lockWhenCondition:1];
[_conditionLock unlockWithCondition:0];
NSLog(@"sendThread: Back to life...");
}
else {
// Processing
}
,并在主代码,当您添加数据,你要解锁其他线程,你只需要添加:
[_conditionLock lock];
[_conditionLock unlockWithCondition:1];
注:我没有在这里描述数据是如何在生产者和消费者之间进行交换。在我的程序中,它正在经历一个SQLite/CoreData数据库,所以线程同步在更高层次完成。但是如果你使用NSMutableDictionary,你需要添加一些NSLock。
0
这是我创建的包装类,它使用NSCondition模拟ManualResetEvent。
@interface WaitEvent : NSObject {
NSCondition *_condition;
bool _signaled;
}
- (id)initSignaled:(BOOL)signaled;
- (void)waitForSignal;
- (void)signal;
@end
@implementation WaitEvent
- (id)initSignaled:(BOOL)signaled
{
if (self = ([super init])) {
_condition = [[NSCondition alloc] init];
_signaled = signaled;
}
return self;
}
- (void)waitForSignal
{
[_condition lock];
while (!_signaled) {
[_condition wait];
}
[_condition unlock];
}
- (void)signal
{
[_condition lock];
_signaled = YES;
[_condition signal];
[_condition unlock];
}
@end
我已经做了一些基本的测试,但我认为应该用更少的仪式完成工作。
相关问题
- 1. 来自C#的ManualResetEvent的本机C++等价物
- 2. BufferedImage.getRGB C#等价物?
- 3. Java的等价的.NET的ManualResetEvent和WaitHandle
- 4. C#中func_get_arg的等价物?
- 5. Encoding.Unicode.GetByteCount(str)的C++等价物?
- 6. C#中fmodf的等价物?
- 7. C#Java HashMap等价物
- 8. C/C++中的CreateObject等价物? (COM Interop)
- 9. C++ BITMAPINFOHEADER biBitCount在C#中的等价物
- 10. Python的等价物@
- 11. os.getpardir()的等价物?
- 12. document.getElementsByClassName的等价物
- 13. C++/C#数组移位等价物
- 14. android中的fgets(c langauage)的等价物
- 15. 来自C++的constexpr的等价物?
- 16. MATLAB的robustfit的Java或C等价物
- 17. 寻找C#的XmlConvert.EncodeName的Java等价物
- 18. Java中的C#OnDeserialized/OnSerializaed的等价物?
- 19. Objective C中Swift的.map的等价物?
- 20. C#中__DATE__,__TIME__宏的等价物#
- 21. rlwinm的C++等价物是什么? (PowerPC)
- 22. Java中C#锁定的等价物?
- 23. 什么是C++中的instanceof等价物?
- 24. 'grep -C N'的Python等价物?
- 25. 来自Obj的Java等价物C
- 26. Scikit学习C++的等价物?
- 27. 什么是EventWaitHandle的Objective C等价物?
- 28. 什么是ChrW(e.KeyCode)的C#等价物?
- 29. 什么是UINT32_MAX的C++等价物?
- 30. Java的等价物C#大理性
阅读文档的这似乎是做我所需要的。谢谢! – Lounges 2009-07-07 23:19:00
它看起来像NSCondition更像是AutoResetEvent而不是ManualResetEvent。 – Brett 2013-01-25 03:50:13