letprocess_event=function|None->print_endline"Unknown event"|Some(Kqueue.Event.Timertimer)->beginPrintf.printf"Timer %d fired %d times since last poll\n%!"timer.Kqueue.Event.Timer.idtimer.Kqueue.Event.Timer.countend|_->print_endline"Unexpected event"letreckqueue_loopkq=leteventlist=Kqueue.Eventlist.create5inletret=Kqueue.keventkq~changelist:Kqueue.Eventlist.null~eventlist~timeout:Noneinmatchretwith|-1->Printf.printf"Error executing kqueue\n%!"|_->beginKqueue.Eventlist.iter~f:(funk->process_event(Kqueue.Event.of_keventk))eventlistend;kqueue_loopkqletrecmake_timers=function|[]->[]|(id,sec)::ts->lettimer=Kqueue.Change.Filter.Timer.({id=id;unit=Unit.to_tUnit.Seconds;time=sec})intimer::make_timerstsletmain()=letkq=Kqueue.create()inlettimers=make_timers[(1,5);(2,10);(3,1)]inletkevents=List.map(funt->Kqueue.Change.Filter.to_keventKqueue.Change.Action.(to_t[Flag.Add])(Kqueue.Change.Filter.Timert))timersinignore(Kqueue.keventkq~changelist:(Kqueue.Eventlist.of_listkevents)~eventlist:Kqueue.Eventlist.null~timeout:None);Printf.printf"Waiting...\n%!";kqueue_loopkqlet()=main()
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.