8Fermer10
PolluxLe 24/04/2006 à 13:13
Brunni :
Là il devrait attendre sur les conditions et après lancer un messagebox... et là il n'y a pas d'autre choix que tout sauver/restaurer les registres, etc. comme en préemptif non? sad

Ben oui, c'est le but de setjmp()/longjmp() smile
Donc pas l'idéal si on a peu de ressources...

Oui, et surtout ce qui prendra le plus de place c'est sans doute la pile sad (enfin remarque ça doit être possible de la compresser et de la décompresser quand on change de thread)
dans ce cas un système par messages comme Windows ce serait mieux j'imagine, mais alors je comprends pas du tout la manière de gérer ça (proprement du moins), genre comment tu implémenterais cette quête: tu parles à un perso, qui va détruire le pont devant toi avec l'animation et tout? hum
Bref, si tu pouvais éclairer ma lanterne, ce serait sympa merci smile

Par exemple :
void ParlerAuPerso() {
  MessageBox("Je vais détruire le pont, muahaha!");
  map[mypont.pos].value = DESTROYED;
  SEMAPHORE *sem = map[mypont.pos].is_destroyed;
  signal(sem);
}

DEFINE_LISTENER(AttendrePontDétruit) {
  SEMAPHORE *sem = map[mypont.pos].is_destroyed;
  return Listener(sem,CodePontDétruit,NULL);
}
DEFINE_LISTENER(CodePontDétruit) {
  MessageBox("Fallait pas le détruire");
  return NULL;
}

Grosso modo un listener est appelé quand une certaine condition se produit, et il doit renvoyer un nouvel ensemble de listener, qui seront à leur tour appelés quand d'autres conditions se seront produites smile