- 論壇徽章:
- 0
|
通信的服務端程序,用
if (select(nfds, &rfds, (fd_set *)0, (fd_set *)0,
(struct timeval *)0) < 0)
errexit("select: %s\n", strerror(errno));
來等待接收客戶端的連接.
同時還要有一個定時寫某共享內存的操作,2.4下是創(chuàng)建一個線程,在線程里設置定時器,使用沒問題。
如下:
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下好好的呢?
因為是要用的時候直接網上找了些例子,沒有對定時器深入理解,所以請教各位了!謝謝! |
|