Y a-t-il un équivalent de la classe ManualResevent de .NET à la disposition de l'objectif-C / Cocoa? P>
4 Réponses :
Je ne suis pas très familier avec ManualResetevent, mais basé sur La documentation , elle ressemble à La classe NSCondition A> pourrait être ce que vous recherchez. P>
NSCondition n'est en aucun cas un équivalent exact, mais il fournit une fonctionnalité de signalisation similaire. Vous voudrez peut-être aussi lire sur nslock a>. p>
Lire sur le doc, cela semble faire exactement ce dont j'avais besoin. Merci!
Il semble que NSCondition ressemble davantage à des retouches automatiques et non manuellementReseTevent.
Consultez cet exemple utile: Stackoverflow.com/questions/6158397/...
ah, ce sont les variables de condition de l'homme pauvre. P>
Vous pouvez utiliser la classe Vous allez l'aimer. P> nscondition code>, mais je pense que c'est mieux
aller directement à la source. Commencez par pthread_cond_init code>. P>
NSCONDITION est une enveloppe de niveau supérieur autour de Pthreads. Si l'interface NSCONDITION / NSLOCK effectue le travail, il n'est pas nécessaire de passer de faible niveau.
Eh bien, je suppose que vous pourrait i> le faire le moyen facile.
Je vais vous donner le code de l'échantillon que j'aurais aimé trouver hier (mais ne pouvait trouver nulle part). Si vous souhaitez créer une classe productrice / consommateur où le consommateur est asynchrone, c'est ce que vous devez faire:
Vous devez déclarer et allouer le NSCONDIMLOCK. P>
[_conditionLock lock]; [_conditionLock unlockWithCondition:1];
Voici une classe d'enveloppe que j'ai créée qui émule le manuelResevente à l'aide de 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