- 论坛徽章:
- 0
|
通信的服务端程序,用
if (select(nfds, &rfds, (fd_set *)0, (fd_set *)0,
(struct timeval *)0) < 0)
errexit("select: %s\n", strerror(errno));
来等待接收客户端的连接.
同时还要有一个定时写某共享内存的操作,2.4下是创建一个线程,在线程里设置定时器,使用没问题。
如下:
void thread(void)
{
signal(SIGALRM, sigalrm_handler);
set_timer();
while(1)
{
}
}
void set_timer()
{
struct itimerval itv, oldtv;
itv.it_interval.tv_sec = 5;
itv.it_interval.tv_usec = 0;
itv.it_value.tv_sec = 5;
itv.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, &oldtv);
printf("settime\n");
}
void sigalrm_handler(int sig)
{
count++;
printf("timer signal.. %d\n", count);
}
main()
{
......
pthread_t id;
int ret;
ret=pthread_create(&id,NULL,(void*(*)(void*))thread,NULL);
.......
}
但移到2。6内核后,就提示说
select: interrupted system call
为什么?
是因为select和 signal(SIGALRM, sigalrm_handler)之间冲突?
但为什么2。4下好好的呢?
因为是要用的时候直接网上找了些例子,没有对定时器深入理解,所以请教各位了!谢谢!! |
|