藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 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上實現定時器遇到的問題

有寫系統,信號中斷後,不可重入。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com