BOOST 執行緒完全攻略 擴充套件 事務執行緒

2021-08-25 19:57:29 字數 2746 閱讀 3925

**:

什麼叫事務執行緒

舉個例子:

我們寫乙個im客戶端的登入子執行緒,則該子執行緒會有這麼幾個事務要處理

no.1 tcp socket物理連線

no.2 邏輯登入

no.4 狀態更新

我們通常的**寫法是

voidthreadlogin()

catch(exception) }

序列的邏輯用序列的**寫,不太好看,況且中途如果主線程發出取消指令,還不好處理。

這裡擴充套件的thread類,就是來解決這個問題的,他會提供給程式設計師一種事件處理的模式

classthreadlogin

voidoneventlogin()

voidoneventquery()

voidoneventupdate() }

原始碼如下

類的擴充套件

//增強執行緒事務處理能力

#pragmaonce

#include"controlled_module_ex.hpp"

class

thread:publiccontrolled_module_ex

;processm_process;

controlled_timerm_timer_process;

intm_process_begin,m_process_end;

doublem_timeout_default;

public:

voidstartprocess(intprocess_begin,intprocess_end,doubletimeout_default=1.0,intcycle=1000)

voidtryagain()

else

this->postmessage(bm_ring_process);

}voidnext()

else

}voidfail()

virtual

voidon_safestart()

virtual

voidon_safestop()

virtual

voidmessage(const_command&cmd)

if(cmd.ncmd==bm_ring_processend)

if(cmd.ncmd==bm_ring_processfail)

}virtual

voidon_timer(constcontrolled_timer*p)

else

if(this->m_process.status==thread::waiting) }}

else

if(this->m_process.status==thread::failed)

else

if(this->m_process.status==thread::done) }}

}}virtual

voidon_process()

virtual

voidon_process_end(){}

virtual

voidon_process_fail(){}

intget_sequence()

voidput_timeout(doublev)

voidput_trycount(intv)

intget_level()

voidput_level(intv)

std::stringget_lasterror()

voidput_lasterror(std::stringv)

__declspec(property(put=put_trycount))inttrycount;

__declspec(property(put=put_timeout))doubletimeout;

__declspec(property(get=get_level,put=put_level))intlevel;

__declspec(property(get=get_sequence))intsequence;

__declspec(property(get=get_lasterror,put=put_lasterror))std::stringlasterror; };

虛函式thread::on_process()處理各種事務事件

虛函式thread::on_process_end()是所有事務處理完畢事件

虛函式thread::on_process_fail()是事務處理出現錯誤,這時所有事務被取消,執行緒終止

這裡給乙個簡單的範例,

總共執行緒要完成3件事務,其中第二個事務要求使用者確認是否繼續

#defineprocess_11

#defineprocess_22

#defineprocess_33

classthdex:public

thread

else

if(this->level==process_2)

else

}else

if(this->level==process_3)

}virtual

voidon_process_fail()

virtual

voidon_process_end()

};int_tmain(intargc,_tchar*argv)

thread事務還支援超時設定和重試次數設定,這裡就不做介紹,讀者可以自己研究**。

redis完全攻略

安裝篇 宣告 以下環境均是在ubuntu下進行 wget tar zxf redis 2.4.4.tar.gz 然後進入目錄後直接make就可以了 如果邇的系統是32位的那麼執行 make 32bit 安裝完成後 執行一下make test看是否正常 如果出現 you need tclsh8.5 i...

搭訕mm完全攻略

如果你的長相還需要搭訕女生的話 那搭訕通常都不是乙個明智的決定 女性的彈簧心理會對太主動靠近的人有明顯地排斥 所以很多時候轉身離開才會有吸引 但前提是你要先勾上 搭訕的最高境界是不搭 episode i 回寢室路上確定目標mm 若無其事地迎面走過去.目光一定要散漫.找一哥們騎車從目標mm背後朝著她背...

EditPlus除錯PHP完全攻略

目前擁有的功能 1.語法自動著色 函式,變數等使用不同的顏色表示 2.函式自動完成 這個挺有用的 3.php 除錯 及時測試 4.php語法檢查 檢測 是否符合php語法規範 5.php 分析 錯誤分析 9.新建php檔案的基本模板 新建檔案的基本內容 phptools.rar 前提說明 1.以下所...