|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
在solaris上實現定時器遇到的問題
:?:
程序的代碼如下:
main()
{
……
buildSigHandle();
setTimer(1000);
……
}
void setTimer(int MillSecond)
{
struct itimerval oldtime;
struct itimerval newtime;
int second = MillSecond/1000;
int micron = (MillSecond%1000)*1000; //微秒
newtime.it_interval.tv_sec = second;
newtime.it_interval.tv_usec = micron;
newtime.it_value.tv_sec = second;
newtime.it_value.tv_usec = micron;
setitimer(ITIMER_REAL, &newtime, &oldtime);
}
void buildSigHandle()
{
struct sigaction new_sigalarm;
new_sigalarm.sa_handler = TimerHandler;
sigemptyset(&new_sigalarm.sa_mask);
new_sigalarm.sa_flags = 0;
new_sigalarm.sa_flags |= SA_RESTART;
sigaction(SIGALRM, &new_sigalarm,NULL);
}
另外在程序中還有一個線程阻塞在socket上進行偵聽。結果發現在運行以後,當定時器觸發時,阻塞的accept函數會出錯返回。這是怎麼回事??
請高手們不吝賜教。多謝了! |
在solaris上實現定時器遇到的問題
看清楚是正常返回,還是EINTR返回 |
在solaris上實現定時器遇到的問題
剛才說錯了,是出錯返回。 |
在solaris上實現定時器遇到的問題
accept() 出錯返回後,用perror(),報告的出錯信息是
Interrupted system call
這是怎麼回事?應該怎麼處理呢?? |
在solaris上實現定時器遇到的問題
你不是有SIGALRM嗎,被打斷了呀,你可以sigprocmask()阻塞信號 |
在solaris上實現定時器遇到的問題
有寫系統,信號中斷後,不可重入。 |
| |