【轉】ACE編程小結

來源:互聯網
上載者:User

標籤:blog   http   io   os   使用   ar   資料   art   on   

轉自:http://blog.csdn.net/mjp_mjp/article/details/4406059

1、多線程中的ACE_Reactor::EventLoop,當在多線程(池)中調用EventLoop時,需要注意,在Acceptor/EventHandler中要使用其中的方法Reactor()來擷取ACE_Reactor的指標,不要使用ACE_Reactor::instance,道理很簡單喲。不過,一定要注意,在編程時,使用Reactor()類方法,比使用單件的方法要好很多,起碼安全,也不會破壞封裝性。

2、ACE_Task中的Msg_Queue,這個類的確很迷人,不過要注意getq和putq都可能會引起阻塞,因此,最好使用逾時的方式來調用它們,特別是在結束這個task時候。因為,你要清空msg_queue,如果不逾時,你可能無法安全的退出線程。

3、ACE_Svc_Handler,這個類很好,它繼承於ACE_Task,因此它有msg_queue,還可以被用於ACE的組件配置模型中。其中對於handle_output,要注意,因為它不會自動被架構調用,除非你使用了策略類ACE_Reactor_Notification_Strategy(msg_queue需要它,windows下用的是完成連接埠),它使用流量控制方式通知你可以寫。而且,在handle_output內,不要吝惜,一定要使用while,把msg_queue裡面的message_block儘可能全部取出,然後發送出去(直到send返回-1,errono=EWOULDBLOCK)。

4、Acceptor/Handler,要在end_event_loop之前被清除。如果使用了new建立acceptor的話,最好在end_event_Loop前,登出它,即在handle_close時用參數DONT_CALL登出,並delete。如果你是在end_event_loop 後在刪除它的話,ACE保證會讓你遇到無法讓你冷靜的崩潰斷言等致命錯誤 。有一種思想,就是如果new出來的對象指標,在程式退出前,一直沒有變化,也就是說,對象依然被你掌控的話,你可以不用去delete,而且,這個也不叫記憶體泄露。因為現在的作業系統,在進程被殺死後,會清理進程使用過的空間。

5、善使局部類(在函數體中聲明定義的類),嚴格意義上講,這個不是ace範疇。局部類對象,可以共用全域/靜態資料,但是不能直接使用函數體內的資料;或者成員函數所在類內的變數,不過可以使用所在類指標,訪問類的私用成員。這個很強悍,可以做一些很私密的處理。而且,可以利用這一點,返回一個局部類對象指標(當然是void*),而c++保證,外界無法訪問訪問它,更不能刪除它。

6、EMSGSIZE,這個errorcode,我當初沒有理解,只是在實踐中碰到了,當你請求的資料length,小於實際資料長度時,會有這個error。這時,我們可以採取約定的方式,即,我們每次不得發送資料長度超過MTU的包,接收當然也不會超過這個數值。也不會報這個error。而且這樣做有好處,起碼可以防止別人惡意發送長度很大的包來攻擊你。而且,更重要的是,小於MTU的資料不會被分包傳輸,資料安全而且可靠。這點對tcp/udp同樣適用喲。

7、ace用於mfc環境,或者說用於共用庫(dll、so等)時,最好在使用前使用ACE::init初始化一下,並在退出前使用ACE::fini。

【轉】ACE編程小結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.