Gibt es ein Äquivalent der .NET ManualResetEvent-Klasse, die für Objective-C/Cocoa verfügbar ist?Objective-C/Cocoa-Äquivalent von C# ManualResetEvent
Antwort
Ich bin nicht sehr vertraut mit ManualResetEvent, aber based on the documentation, es sieht aus wie the NSCondition class könnte das sein, was Sie suchen.
NSCondition ist keineswegs eine genaue Entsprechung, aber es bietet ähnliche Signalisierungsfunktionalität. Vielleicht möchten Sie auch auf NSLock nachlesen.
Ah, das sind armen Mann Zustandsvariablen.
Sie könnten die NSCondition
Klasse verwenden, aber ich denke, es ist besser
direkt an die Quelle zu gehen. Beginnen Sie mit pthread_cond_init
.
Sie werden es lieben.
NSCondition ist ein Wrapper auf höherer Ebene um Pthreads. Wenn die NSCondition/NSLock-Schnittstelle den Job ausführt, müssen Sie nicht auf eine untergeordnete Ebene wechseln. – Naaff
Nun, ich denke, du könntest es einfach machen. –
Ich gebe Ihnen den Beispielcode, den ich gestern gerne gefunden hätte (aber nirgends finden konnte). Wenn Sie eine Producer/Consumer-Klasse erstellen möchten, in der der Consumer asynchron ist, müssen Sie Folgendes tun:
Sie müssen NSConditionLock deklarieren und zuordnen.
NSArray * data = [self getSomeData];
if ([data count] == 0) {
NSLog(@"sendThread: Waiting...");
[_conditionLock lockWhenCondition:1];
[_conditionLock unlockWithCondition:0];
NSLog(@"sendThread: Back to life...");
}
else {
// Processing
}
Und im Hauptcode, wenn Sie Daten hinzufügen, und Sie möchten den anderen Thread zu entsperren, müssen Sie nur noch hinzufügen:
[_conditionLock lock];
[_conditionLock unlockWithCondition:1];
Hinweis: Ich habe hier nicht beschreiben, wie Daten zwischen dem Hersteller und dem Verbraucher ausgetauscht. In meinem Programm ging es durch eine SQLite/CoreData-Datenbank, so dass die Thread-Synchronisierung auf einer höheren Ebene erfolgt. Wenn Sie jedoch ein NSMutableDictionary verwenden, müssen Sie NSLock hinzufügen.
Hier ist eine Wrapperklasse, die ich erstellt habe, die ManualResetEvent mit NSCondition emuliert.
Ich habe nur einige grundlegende Tests gemacht, aber ich denke, es sollte die Arbeit mit viel weniger Zeremonie erledigen.
- 1. In Bezug auf die Verwendung von ManualResetEvent Verwendung C#?
- 2. Boost entspricht ManualResetEvent?
- 3. ManualResetEvent WaitOne nicht entsperren
- 4. Wann sollte ein ManualResetEvent entfernt werden?
- 5. C# /. NET: Testen von BackgroundWorker mit NUnit
- 6. Wie kann ich feststellen, ob ein ManualResetEvent signalisiert oder nicht signalisiert wird?
- 7. Warum warten Threads, die auf ein ManualResetEvent warten, auch wenn Close() aufgerufen wird?
- 8. Techniken zum Beenden/Abbrechen While-Schleifen über Threads: Bool, ManualResetEvent oder CancellationToken
- 9. C# Threadpool Synchronisation Anfrage
- 10. Verwenden von Bash (Cygwin) in C# -Programm
- 11. C#: Absturz auf Manual
- 12. von C++ zu C#
- 13. C# Scripting von C++?
- 14. Steuern von Firefox von C/C++
- 15. Aufruf von Visual C++ - Code von C#
- 16. Aufruf von C# aus C
- 17. Aufruf C++ Funktion von C#
- 18. Mischen von C/C++ - Bibliotheken
- 19. C# -Äquivalent von C sscanf
- 20. C# von C++ aufrufen, Rückgabewert
- 21. Call C++ - Bibliothek von C#
- 22. C-Äquivalent von C++ STL
- 23. Ruftaste C++ Funktionszeiger von C#
- 24. Interop Zeichenfolge von C# C++
- 25. Aufruf C++ Methoden von C
- 26. C# -Äquivalent von OBJ-C
- 27. Quelltext von c/C++ Funktionen
- 28. Kombinieren von C++ und C#
- 29. C#/Oracle SQL - Verwenden von BackgroundWorker zur Verbindung mit der Datenbank
- 30. C# Fädelmechanik
Lesen auf dem Dokument scheint dies genau das zu tun, was ich brauchte. Vielen Dank! – Lounges
Es sieht so aus, als ob NSCondition eher AutoResetEvent und nicht ManualResetEvent ist. – Brett
Schauen Sie sich dieses nützliche Beispiel an: http: //stackoverflow.com/questions/6158397/eqivalent-of-gcd-serial-dispatch-queue-in-ios-3-3/6258379#6258379 – Brett