**:
什麼叫事務執行緒
舉個例子:
我們寫乙個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.以下所...