我现在正在研究一个计时器,计时器由一个链表维护。像这样:
struct timer
{
struct timer* prev;
struct timer* next;
struct timespec start;
struct timespec interval;
void* par;
int (*handler) (void* par);
};
然后我使用一个线程调用dispatch
sleep 并从列表中选择计时器。代码简化如下:
//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
(比如handler函数执行耗时500ms,然后dispatch
卡住了),列表中的rest timers可能无法及时处理。那么这里需要一个thread pool
吗?或者有没有其他建议?