QNX – Illustration 01

Le code proposé à droite est celui de l'illustration 01 proposé dans le document remis en classe.

Quelques liens pour en savoir plus sur des outils clés de cet exemple :

#include <sys/netmgr.h>
#include <sys/neutrino.h>
#include <iostream>
using namespace std;
const int CODE_PULSATION = _PULSE_CODE_MINAVAIL;
union message {
   _pulse   pulse;
   // ...etc. La structure repose sur une entente entre les homologues
};

int main() {
   int id_canal = ChannelCreate(0);
   sigevent   evenement;
   evenement.sigev_notify = SIGEV_PULSE;
   evenement.sigev_coid =
      ConnectAttach(ND_LOCAL_NODE, 0, id_canal, _NTO_SIDE_CHANNEL, 0);
   evenement.sigev_priority = getprio(0);
   evenement.sigev_code = CODE_PULSATION;
   //
   // Creation de la minuterie
   //
   timer_t id_minuterie;
   timer_create(CLOCK_REALTIME, &evenement, &id_minuterie);
   //
   // Parametrer la minuterie. Première pulsation dans 500 millions nsecs + 1 sec
   // (une seconde et demie), pulsations suivantes chaque demi-seconde
   //
   itimerspec itime;
   //
   // Delai de la 1re pulsation
   //
   itime.it_value.tv_sec = 1;
   itime.it_value.tv_nsec = 500'000'000;
   //
   // Delai des pulsations ultérieures
   //
   itime.it_interval.tv_sec = 0;
   itime.it_interval.tv_nsec = 500'000'000;
   timer_settime(id_minuterie, 0, &itime, 0);
   for (;;) { // beurk
      message  msg;
      int rcvid = MsgReceive(id_canal, &msg, sizeof msg, 0);
      if (rcvid == 0 && msg.pulse.code == CODE_PULSATION)
         cout << "Petite pulsation..." << endl;
   }
}

Valid XHTML 1.0 Transitional

CSS Valide !