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