D'expérience, c'est pas une bonne idée de gérer ça dans des handler de signaux (je pense que c'est ce que tu veux dire par interruption ?).
Je comprends pas bien ce que tu veux faire, mais ça devrait t'aider à mieux voir le truc :
Si tu as des impératifs de temps de traitement rapide de plusieurs connections, je pense qu'il vaut mieux sauver les événements dans ton cycle de read (ou de poll) sur to FD et laisser le traitement de ceux-ci dans un autre thread.
C'est plus simple avec un bout de code genre :
intevent_process_step(void){structeventev;if(pop_event(&ev)==0)return0;returnprocess_event(&ev);}intevent_read_step(intfd){structeventev;intret;ret=read(fd,&ev,sizeofev);if(ret==sizeofev)ret=push_event(&ev);elseret=-1;returnret;}/* * Soit avec des threads */void*thread_read(void*arg){structpoll_table*table=arg;for(;;){fd=poll_get_fd(table);if(fd<0)break;if(fd==0)break;if(event_read_step(fd)<0)break;}returnNULL;}void*thread_process(void*arg){for(;;){intworked;worked=event_process_step();if(workded<0)break;if(worked==0)more_work();}returnNULL;}/* * Soit sans thread */voidloop_process(structpoll_table*table){for(;;){intworked;fd=poll_get_fd(table);if(fd<0)break;if(fd==0)break;if(event_read_step(fd)<0)break;worked=event_process_step();if(workded<0)break;if(worked==0)more_work();}}/* * Ou même avec un peu de repartition de charge */voidloop_process_fair(structpoll_table*table){for(;;){intworked;worked=0;while(worked<MAX_READ_WORK){fd=poll_get_fd(table);if(fd<0)break;if(fd==0)break;if(event_read_step(fd)<0)break;worked++;}while(worked<MAX_PROCESS_WORK){done=event_process_step();if(done<0)break;if(done==0)break;worked++;}more_work();}}
# Avec des boucles d'event
Posté par ninis666 . En réponse au message Polling ou Interrupt ?. Évalué à 2.
D'expérience, c'est pas une bonne idée de gérer ça dans des handler de signaux (je pense que c'est ce que tu veux dire par interruption ?).
Je comprends pas bien ce que tu veux faire, mais ça devrait t'aider à mieux voir le truc :
Si tu as des impératifs de temps de traitement rapide de plusieurs connections, je pense qu'il vaut mieux sauver les événements dans ton cycle de read (ou de poll) sur to FD et laisser le traitement de ceux-ci dans un autre thread.
C'est plus simple avec un bout de code genre :
Bref, tu vois l'idée ...