建立乙個可正常結束的Proactor伺服器

2021-05-23 00:37:54 字數 1959 閱讀 3099

這是apg上關於proactor使用的例子,去掉了trace資訊,做了一點小修改:

code:

#include

#include

#include

#define listen_port 5222

class ha_proactive_service : public ace_service_handler

virtual void open (ace_handle h, ace_message_block&)

ace_message_block *mb;

ace_new_noreturn (mb, ace_message_block (1024));

if (this->reader_.read (*mb, mb->space ()) != 0)

}virtual void handle_read_stream (const ace_asynch_read_stream::result &result)

else

}virtual void handle_write_stream (const ace_asynch_write_stream::result &result)

private:

ace_asynch_read_stream reader_;

ace_asynch_write_stream writer_;

};class ha_proactive_acceptor : public ace_asynch_acceptor

;int ace_tmain (int, ace_tchar *)

程式在5222

埠上監聽,對於每個已建立的連線,伺服器將所有收到的資料列印到控制台上。這就是整個程式所實現的功能。

但是這個程式存在乙個很大的問題:沒有辦法正常結束。當執行這個程式後,只能強制結束這個程序,因為程式沒有提供從

proactor

事件迴圈中退出來的方法。

讓程式能夠正常退出是很有必要的,比如在進行記憶體洩漏的檢測時,如果程式沒有辦法正常退出,那麼記憶體洩漏的檢測工作將很難進行。

為了實現能夠正常關閉程式的目的,需要稍微修改一下上面的程式實現。

這次程式將會有兩個執行緒在執行,乙個是

proactor

事件迴圈執行緒,另乙個則為控制線程。在控制線程中,要能夠關閉

proactor

執行緒,然後將程式乾淨地退出。

得益於ace

強大的封裝,所做的改動並不大:

code:

class proactorthread : public ace_task_base

int close()

virtual int svc()

};int ace_tmain (int, ace_tchar *)

僅僅只是新增了乙個新的類,用於封裝

proactor

事件迴圈執行緒,另外修改了程式的主函式。這次程式將首先建立乙個

proactor

事件迴圈執行緒,然後主線程等待使用者輸入任意數後結束

proactor

執行緒,在

proactor

執行緒正常退出後主執行緒退出。

注意這裡有兩個要點:

1.當執行

proactor_end_event_loop()

之後,proactor

執行緒是從

proactor_run_event_loop()

處退出,所以會接著執行下面的**,列印出

」 thread ended」

資訊。2

.主線程必須使用

wait()

等待proactor

執行緒正常結束後再退出,否則如果主線程退出後,

proactor

執行緒仍有一些資源釋放工作未完成,那麼就會存在資源未正確釋放的問題。

謝幕,乙個時代的結束!

時間很快,明天開始投入考研複習中,今天是最後碼 了。曾經的痛苦,即將遠去,失去的東西才會珍惜。2個月後pat甲級,不管未來結果如何,保持努力的姿態就好。考研注定是一場鏖戰,中科院,zju,本校計科和自動化,都糾結過,痛苦過,現在心裡的答案漸漸明晰。心裡一定要有全域性觀,對時間既要進行巨集觀的分配,也...

這是乙個開始的結束

可以有江山一色,也可以有花鳥紛飛,我們的世界裡只要有實力,創造似乎並不是難事。難得是如何控制慾望,如何改動實際的布局。默默地守護和默默地抗爭,或許並不知道自己想要的是什麼,也不知道這存在有多大的意義,總之離不開利益,利益不均衡就會有問題,有鬥爭 有時候真的很孤單,卻又找不到我的她,她在哪 漫長的路程...

雜談 乙個故事的結束

月 日,期末考試的塵埃落定又標誌這我乙個學期的結束。看到朋友圈裡許多同學都寫下了自己對這個學期的總結,於是我也來趁著這個初二年級的結束來對我之前的學習做個總結 原諒我文筆不太好。我上次寫總結已經是2019年的暑假結束了,那麼這次就寫一些從那時到現在我的一系列故事吧。回想起這個學期,大部分時間都在網課...