亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2639 | 回復: 3
打印 上一主題 下一主題

定時器問題 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-06-07 11:59 |只看該作者 |倒序瀏覽
通信的服務端程序,用
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下好好的呢?
因為是要用的時候直接網上找了些例子,沒有對定時器深入理解,所以請教各位了!謝謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2007-06-07 12:34 |只看該作者
可能是線程和信號結合在一起導致的問題。

信號被你的主線程捕獲了,所以select返回,并且設置為被中斷。

論壇徽章:
0
3 [報告]
發(fā)表于 2007-06-07 16:57 |只看該作者
那像這樣子的需求要怎么實現(xiàn)呢?
通信服務器端,等待客戶端發(fā)送信號。同時,本身又要定時修改某共享內存,已表示進程還在繼續(xù)運行,沒有錯誤結束!

論壇徽章:
0
4 [報告]
發(fā)表于 2007-06-07 18:45 |只看該作者
timer現(xiàn)在應該是線程安全的吧。

你寫共享存儲就是為了說明自己還活著?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP