Esiste un equivalente della classe .NET ManualResetEvent disponibile per l'uso in Objective-C/Cocoa?Objective-C/Cacao equivalente di C# ManualResetEvent
risposta
Non ho molta familiarità con ManualResetEvent, ma based on the documentation, sembra che the NSCondition class potrebbe essere quello che stai cercando.
NSCondition non è affatto un equivalente esatto, ma fornisce funzionalità di segnalazione simili. Si potrebbe anche voler leggere su NSLock.
Ah, quelle sono le variabili di condizione di uomo povero.
È possibile utilizzare la classe NSCondition
, ma penso che sia meglio
andare direttamente alla fonte. Inizia con pthread_cond_init
.
Ti piacerà moltissimo.
NSCondition è un wrapper di livello superiore intorno a pthreads. Se l'interfaccia NSCondition/NSLock fa il lavoro, non è necessario andare a basso livello. – Naaff
Beh, immagino che potresti farlo nel modo più semplice. –
Ti darò il codice di esempio che avrei voluto trovare ieri (ma non è stato possibile trovare da nessuna parte). Se si desidera creare una classe produttore/consumatore in cui il consumatore è asincrono, è ciò che è necessario fare:
È necessario dichiarare e allocare 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
}
E nel codice principale, quando si aggiungono i dati e si desidera sbloccare l'altro thread, basta aggiungere:
[_conditionLock lock];
[_conditionLock unlockWithCondition:1];
Nota: Non descrivo qui come i dati siano scambiato tra il produttore e il consumatore. Nel mio programma stava passando attraverso un database SQLite/CoreData, quindi la sincronizzazione dei thread è fatta a un livello più alto. Ma se si usa NSMutableDictionary, è necessario aggiungere alcuni NSLock.
Ecco una classe wrapper che ho creato che emula ManualResetEvent utilizzando 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
ho fatto solo alcuni test di base, ma penso che dovrebbe ottenere il lavoro fatto con molto meno cerimonia.
- 1. Boost equivalente di ManualResetEvent?
- 2. ManualResetEvent vs Thread.Sleep
- 3. Qual è l'equivalente di java di ManualResetEvent?
- 4. C equivalente di C++ STL
- 5. equivalente C++ di java.lang.Integer.MIN_VALUE
- 6. C# equivalente di perl $ _
- 7. C++ equivalente di perror?
- 8. equivalente C# di LinkedHashMap
- 9. equivalente C++ di istanza di
- 10. Devo chiamare Close() su un ManualResetEvent?
- 11. Quando deve essere eliminato un oggetto ManualResetEvent?
- 12. Equivalente Objective-C di "override" in C#
- 13. C# Equivalente di Java IdentityHashMap
- 14. VB.NET equivalente di C# "As"
- 15. C# equivalente di jQuery.parents (Tipo)
- 16. Equivalente di #region per C++
- 17. Haskell equivalente di C __LINE__
- 18. Equivalente Java di C# system.beep?
- 19. Equivalente di NSMutableArray in C++?
- 20. Equivalente Java di C# 'Enumerable.Any'
- 21. equivalente di vbCrLf in C#
- 22. C# equivalente di VB6 GetObject
- 23. Equivalente Python di C++ getline()
- 24. C++ 11 equivalente di java.util.ConcurrentHashMap
- 25. C++ CString equivalente in C#
- 26. Equivalente Jaxb in C#
- 27. Equivalente C equivalente a "Variabili variabili" di PHP
- 28. PathCanonicalizza equivalente in C#
- 29. C# ULONG_PTR Equivalente
- 30. DoEvents equivalente per C++?
Leggendo il documento sembra che faccia esattamente ciò di cui avevo bisogno. Grazie! – Lounges
Sembra che NSCondition sia più simile a AutoResetEvent e non ManualResetEvent. – Brett
Dai un'occhiata a questo utile esempio: http: //stackoverflow.com/questions/6158397/equivalent-of-gcd-serial-dispatch-queue-in-ios-3-x/6258379#6258379 – Brett