Есть ли эквивалент класса .NET ManualResetEvent, доступного для использования в Objective-C/Cocoa?Objective-C/Cocoa эквивалент C# ManualResetEvent
ответ
Я не очень хорошо знаком с ManualResetEvent, но based on the documentation, похоже, что the NSCondition class может быть тем, что вы ищете.
NSCondition ни в коем случае не является точным эквивалентом, но он обеспечивает аналогичную функциональность сигнализации. Вы также можете прочитать на NSLock.
А, это переменные состояния бедных людей.
Вы можете использовать класс NSCondition
, но я думаю, что лучше пойти
, чтобы перейти прямо к исходному коду. Начните с pthread_cond_init
.
Вам понравится.
NSCondition - это оболочка более высокого уровня вокруг pthreads. Если интерфейс NSCondition/NSLock выполняет задание, нет необходимости идти на низкоуровневый уровень. – Naaff
Ну, я думаю, вы можете сделать это легко. –
Я дам вам образец кода, который мне бы хотелось найти вчера (но не смог найти нигде). Если вы хотите создать класс производителя/потребителя, в котором потребитель является асинхронным, это то, что вам нужно сделать:
Вам необходимо объявить и выделить 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.
Вот класс оболочки, который я создал, который эмулирует ManualResetEvent, используя NSCondition.
@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. Повысить эквивалент ManualResetEvent?
- 2. Что такое Java-эквивалент ManualResetEvent?
- 3. C#: сбой ManualResetEvent
- 4. Что касается использования ManualResetEvent C#?
- 5. C# ConcurrentDictionary против ManualResetEvent для контроля резьбы
- 6. Ожидание СкачатьFileAsync с ManualResetEvent C++/cli
- 7. ManualResetEvent - отставание от событий
- 8. ManualResetEvent не работает; Thread
- 9. ManualResetEvent vs while loop
- 10. ManualResetEvent WaitOne не разблокировать
- 11. Проблема синхронизации с ManualResetEvent
- 12. Auto- vs ManualResetEvent, отличия
- 13. ManualResetEvent Пропущенной ниткой
- 14. ManualResetEvent против Thread.Sleep
- 15. ManualResetEvent странного поведения
- 16. Не устанавливая ManualResetEvent истинного
- 17. Java Equivalent из .NET ManualResetEvent и WaitHandle
- 18. Какие ресурсы потребляет AutoResetEvent/ManualResetEvent?
- 19. Таймер в foreach с ManualResetEvent
- 20. Возможные условия гонки с ManualResetEvent
- 21. Параллельное программирование с помощью ManualResetEvent
- 22. C++ эквивалент C fgets
- 23. C эквивалент C++ cin.peek()
- 24. C# эквивалент C++ mem_fun?
- 25. C# эквивалент C sscanf
- 26. C эквивалент STL C++
- 27. Странное поведение C# .NET ManualResetEvent после запуска ПК
- 28. класс Ожидание на ManualResetEvent из Thread в другом классе? [C#]
- 29. Как проверить состояние блокировки AutoResetEvent или ManualResetEvent в C#?
- 30. Использование ManualResetEvent для проверки завершенности обработки
Чтение документов, похоже, делает именно то, что мне нужно. Благодаря! – Lounges
Похоже, что NSCondition больше похожа на AutoResetEvent, а не на ManualResetEvent. – Brett
Ознакомьтесь с этим полезным примером: http: //stackoverflow.com/questions/6158397/equivalent-of-gcd-serial-dispatch-queue-in-ios-3-x/6258379#6258379 – Brett