Я работаю на таймер в настоящее время, таймеры поддерживаются связанный list.Like это:Long precedure в функции обратного вызова таймера
struct timer
{
struct timer* prev;
struct timer* next;
struct timespec start;
struct timespec interval;
void* par;
int (*handler) (void* par);
};
Затем я использую нить под названием dispatch
спать и забрать таймеры из списка. код упрощается, как показано ниже:
//just pseudo code here
void dispatch() {
for (;;) {
while (list_empty()) {
wait();
}
timer* ptr = listhead();
if (timer_begin(ptr)) {
ptr->handler(ptr->par);
list_pop_front();
}
}
}
Вопрос: Когда есть длинный precedure в функции обратного вызова handler
(скажем, функция обработчика стоит 500мс для выполнения, то dispatch
stucks), остальные таймеры в списке не могут быть обработаны вовремя. Так что нам нужно thread pool
? Или есть другие советы?
Не могли бы вы предоставить какой-нибудь практический код или несколько хороших примеров? Я не могу найти более подробную информацию об этой теме. – prehistoricpenguin