11
votes

Objectif-C / COCAO équivalent de C # ManualResetEvent

Y a-t-il un équivalent de la classe ManualResevent de .NET à la disposition de l'objectif-C / Cocoa?


0 commentaires

4 Réponses :



0
votes

ah, ce sont les variables de condition de l'homme pauvre.

Vous pouvez utiliser la classe nscondition , mais je pense que c'est mieux
aller directement à la source. Commencez par pthread_cond_init .

Vous allez l'aimer.


2 commentaires

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 le faire le moyen facile.



1
votes

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];


0 commentaires

2
votes

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


0 commentaires