2011年6月20日
無可否認,現在手機越來越像電腦,電腦越來越像手機.當兩種系統越走越近的時候,開發者當然希望為電腦寫的程序可以不用改動(或改動很少)就可以在手機上運行.就這一點,非??春肳indows phone7.5.這將是微軟翻身的最好機會. 坐等芒果系統,學習WTL.
很多人認為C++過時了,不愿意再花時間學習.我不這樣認為,C++能在移動設備開發上,能喚起第二春. 在windows上用VS用久了,要換個系統,換個環境,學習代價太高了.
一條路走到黑得了...
2010年12月23日
“開閉”原則是指軟件實體應當
對添加開放,
對修改關閉。即軟件實體應該在不修改的前提下擴展,這個原則實際上為軟件設計指明了目標。我們知道軟件設計應當充分考慮軟件的可維護性,即需求發生變化的時候軟件結構能夠靈活地適應這種變化。就評價軟件的可維護性而言,“開閉”原則提供了一個依據。
我們的模塊眾多真的是因為這個原因嗎? 我不贊同.
一個優秀的軟件首先應該是易于測試的.只有方便測試,才能快速的定位問題.
2008年10月26日
為什么寫這個:
1,像我這么愛干凈的人,當然不能容忍和MM聊天的時候,看到一個內衣廣告在上面一閃一閃,這不引誘老納么;
2,為什么不用其它外掛?珊瑚蟲已S,再沒用過其它?,F有的外掛實現了一些我不想要的功能,看IP也沒必要,聊天的都是熟人。另外,不知道它做了些什么事情;
3,打發這個無聊的周末。
怎樣實現:
1,萬能的HOOK
現在用到的是全局的SHELL HOOK,Hook的是窗口創建完成的消息;
g_hShellHook = SetWindowsHookEx( WH_SHELL,
(HOOKPROC)ShellHook,
g_hInstance,
0);
ShellHook 的實現如下:
static LRESULT CALLBACK ShellHook(UINT nCode, WPARAM wParam, LPARAM lParam)


{
if(nCode < 0)
goto CallOrg;
if( HSHELL_WINDOWCREATED == nCode )

{
if( !isQQWnd( (HWND)wParam ) )
goto CallOrg;
EnumChildWindows( (HWND)wParam, EnumChildProc, (LPARAM)0 );
}
CallOrg:
return CallNextHookEx( g_hShellHook, nCode, wParam, lParam);
}

在收到窗口創建后的消息時,就判斷這個窗口是不是QQ的,這里用到了 GetWindowThreadProcessId ,它返回窗口相關的進程ID
BOOL isQQWnd(HWND hWnd)


{
if( g_pContext == NULL )
return FALSE;

if( g_dwQQProcessID == 0 )
g_dwQQProcessID = GetQQProcessID();
DWORD dwWndProcessID;
if( GetWindowThreadProcessId( hWnd, &dwWndProcessID ) == 0 )
return FALSE;
return dwWndProcessID == g_dwQQProcessID;

}

然后枚舉它的子窗口,看它的子窗口有沒有廣告控件,有的話就給子控件發送個WM_CLOSE的消息.
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam )


{
DWORD dwID = GetDlgCtrlID( hwnd );
if( dwID == 0x3e9 )

{
HWND hPrarent = GetParent( hwnd );
PostMessage(hwnd, WM_CLOSE, 0, 0 );
Sleep( 10 );
PostMessage(hPrarent, WM_PAINT, 0, 0 );
}
else if( dwID == 0x643f )

{
PostMessage(hwnd, WM_CLOSE, 0, 0 );
}

return TRUE;
}

其中的兩個硬編碼是用 spy++ 分析出來的,可能因為版本的不同,會有差異。所以我不確定能不能關閉其它版本的QQ廣告。我使用的版本是QQ2008賀歲版。
--------------------------------------------------------------------------
后記:
盡管實現的技術很簡單,但還是花了我大半天的時間. 寫完之后覺得枚舉子窗口的方式太低效, 或者還有其它高效點的方式。另外還有全局鉤子,可能沒有必要。如果下午周末持續無聊,我會嘗試改進一下。
QQ的聊天對話框很簡單,不像MSN的對話框,鐵板一塊,用spy++啥都看不到.但是可以用 AccExplorer 分析.想在MSN的對話框上加點東西進去,實現起來很困難。對這方面有研究的同學不妨與我討論一下實現,一起學習、進步。
代碼的行數沒數,有效代碼估計也就百把行吧,呵呵,我承認我是標題黨。
附: 源代碼 + bin
2008年2月19日
# -*- coding: cp936 -*-
import re
from os.path import dirname
import shutil
import os
pattern = '^#\s*include\s+(<)(.+)(>)(.*)$'
prog = re.compile(pattern)
find_sets = []
def create_dir(file_dir):
#print dirname(_dir);
_dir = dirname(file_dir)
if not os.path.exists(_dir):
os.makedirs(_dir)
def copyHeadFile(root_dir, src_path, des_path, deep = 0):
if((root_dir + src_path) in find_sets):
return
if( not os.path.exists(root_dir + src_path) ):
return
create_dir(des_path + src_path)
shutil.copyfile(root_dir + src_path, des_path + src_path);
find_sets.append(root_dir + src_path)
src_file = open(root_dir + src_path, 'r')
print ''.rjust(deep) + des_path + src_path
for line in src_file:
if prog.search(line):
line = re.sub('(^#\s*include\s+(<))|(>)(.*)$', '', line)
line = line.replace('/', '\\')
line = line.rstrip('\n')
copyHeadFile( root_dir, line, des_path, (deep + 4))
copyHeadFile("D:\\Program Files\\Microsoft Visual Studio 8\\VC\\include\\", "stdafx.h", "d:\\need_hpp\\" )
Python偶而玩玩也很爽。 這個腳本的來例:我寫的demo用到了不少boost的東西,代碼交給領導檢查的時候,又不能把整個boost 都拷貝給他,這個腳本能把引用到的頭文件導出到指定的目錄里面。
2007年11月23日
2007年11月22日星期四 下午7時29分
外面已經一片7黑。室友H君還沒回來,他怕一回來就玩游戲。我不怕玩游戲,一個人,在哪都一樣,只喜歡安靜。
一段音樂,一杯咖啡,一本書,一段代碼,一個晚上。有點喜歡這種感覺了。
樂心說得對,要對生活有要求。呵呵。 看來我的要求也不高。
上次星期公司新員工培訓,內容是“我的五樣”,“七個習慣”。我的五樣,就是先寫下自己最在乎的五樣東西,然后在憂怨的音樂聲中,一個一個的劃去,只留下最后一個,以期幫你找到自己的目標。 我只寫了三樣,而且一樣都沒有劃去,我覺得它們并不矛盾,而且那就是我生命的意義。想知道是哪三樣嗎? 嘿嘿,我可不告訴你。 接著就是《高效能人士的七個習慣》,這本書我早就看過電子版的,當時一邊看一邊想:這不就是說我的習慣嗎?kao。 講課的老師水平一般,很能忽悠,還不如給我們放陳安之老師的成功學。一堂培訓下來,也沒什么長進,浪費我一下午的時間。完了之后,集體去樓下的西餐廳吃蛋炒飯,味道還不錯。這個星期又有培訓,也不知道能不能吃到好吃的蛋炒飯。
想想最近還有什么有趣的事。前天項目組搞每月一次的聚餐,我們一行八人,去了附近的一家小肥羊。涮涮涮,很開心。喝了白酒+啤酒?;氐剿奚?,暈呼呼的睡著了,沒蓋被子,結果睡著睡著,半夜里兩鼻孔被堵起來了,難受,翻出一粒感康,服下,半夢半醒到天亮。
2007年11月14日
今天是星期五,來廣州那天是星期二,離開TW是上個星期五,離開SPL是上個星期二。離開SPL的時候,實在沒有想到自己會在這個陌生的地方開始謀生。短短的十來天,變化的東西很多,而不變的只有一心想成為優秀的程序員的理想(我想,這也是變化的原因)。
為什么離開SPL:
一、 呆了兩年多,對外面的事物很好奇,有些東西,如果不身臨其境的去體會,永遠無法知道;
二、 真的想知道,一個大的項目是怎么被分割成很多小部分,然后有條不紊被執行,然后一次交付,然后有計劃的升級、維護;
三、 不喜歡三天兩頭的為程序加新功能;
四、 不喜歡一個星期上六天班;
五、 不喜歡宿舍太吵,一兩點鐘還被關門的聲音震醒;
六、 不喜歡技術沒有進步,整天干同樣的活(一個游戲天天玩通關,你還喜歡玩嗎?);
七、 不喜歡一個人在戰斗的時候,看著旁邊的胖子偷懶,而且工資比你還高。
為什么離開TW:
一、對煙廠的業務實在沒有興趣,做得好還好,做得不好,被開除了,我應該去干嘛?我可以去干嘛?當初花那么多時間去學習的東西,然后離開的時候,一無是處,是不是浪費自己的時間;
二、對工控不感興趣;看著那些電氣設備,我想自己如果在這行發展,不會比那個有電子和計算機雙學位的同學更牛;
三、對帶頭大哥的技術水平感到失望,尤其是看了他寫的代碼之后,本來一個很簡單的東西,經過他的手就變得異常復雜,還故作高深。整個程序充滿了硬編碼,而且把邏輯和界面混淆在一起;可能他做為帶頭大哥,在別的地方,如業務、工控方面有所建樹,但是我對那些一點興趣都沒,我怎能強迫自己跟著你?
四、感覺不會有太大的長進,我一向認為寫低級界面是體力活;
五、不喜歡在煙廠職工面前裝孫子討好他們,憑什么?我在SPL還是爺呢。
夠了,做自己不喜歡的工作,就像出賣自己的靈魂。不如早點結束,趁自己有選擇的能力。
輾轉來到廣州:
只所以在這待著是因為:
一、我喜歡系統底層,我以前就喜歡,只是沒有時間去了解;
二、項目組的同事相處起來不錯,沒什么架子,很好交流;
三、廣州和長沙的消費似乎差不多,而且這公司還答應包住,所以,每月能剩下的錢就多點了。
四、即便是被開除了,在廣州這地,混個飯似乎也不難,如果沒有虛度時光的話。這邊IT公司挺多的;
五、趁著年輕,想出來見見世面(如果這也是理由的話);
自己做出的這些決定,放了一些人的鴿子,我向你們道歉,你們都是好人,我辜負了你們對我的信任,那是因為我的優柔寡斷和性格上的其它缺陷引起的。這里提到的一些人被定義為:TW的HR和YM大哥,還有雨花亭的楊大哥。
HR在給我辦入職的時候和我說:你不會做兩三天就走人吧?我說:應該不會吧??墒俏易吡耍瑸榱宋宜^的理想,我對不起你;
YM:我們最后一次分開時,我對你說:做這個主要是對業務的理解吧?你拍拍我的肩膀對我說:所以你要每天下車間去看看。我知道你是為我好,如你所說,在長沙找個這樣的工作不容易??蛇@并不是我想要的生活,也許在將來的某天,我會后悔自己失去了一次穩定的機會,但,決不是現在。再次向你說聲對不起。
雨花亭的楊大哥:準備和你合租房子的前一天,我離開長沙了,所以你的鴿子不得不放。
想起來是自己的不對,就覺得挺難過,而且從心里開始BS自己,如果你看到這些,也請BS一下我,讓我能在你BS的眼神中吸取教訓,如果下次有類似的事情,會處理得好。 寫著寫著就覺得有些壓抑,而我也不知道怎樣才能不壓抑些。
放一些圖片吧,作為記錄,而這一切,都已經是回憶。
2007年8月9日
今天發生一件有趣的事情,我要為程序換個圖標..
程序有很多ICO資源,例如 ICO_1,ICO_2,ICO_3,ICO_4....
我新增了一個APP_ICO(程序圖標要換成這個). 我把以前的圖標刪了,然后ID改為以前那個,可是ReBuild之后,程序圖標竟然是 ICO_1。很奇怪。
找了半天,發現ICO_1的ID值是最小的。于是我把APP_ICO的ID值改為最小。Rebuild.終于把程序圖標給換了過來。
2006年12月13日
這樣的帖子,不知道可不可以放到首頁..如果不行,麻煩管理員清理. 謝謝.
HANDLE?GetQQProcess();
bool
?SeachQQNumber(HANDLE?_hProcess,
string
?
&
strQQ);
int
?_tmain(
int
?argc,?_TCHAR
*
?argv[])

{
????HANDLE?hProces?
=
?GetQQProcess()?;
????
if
(hProces
==
?NULL)
????????cout?
<<
"
No?run?QQ!
"
<<
endl;

????
string
?strQQ;
????SeachQQNumber(hProces,strQQ);
????cout?
<<
strQQ
<<
endl;
????system(
"
pause
"
);
????
return
?
0
;
}
bool
?SeachQQNumber(HANDLE?_hProcess,?
string
?
&
strQQ)

{
????SuspendThread(_hProcess);
????
????DWORD?dwBaseAddress;?
????MEMORY_BASIC_INFORMATION?mbi;

????
char
??process_mem[
4096
]?
=
?
{
0
}
;
????DWORD?number_of_bytes_read?
=
?
0
;
????SYSTEM_INFO?si;?
????GetSystemInfo(
&
si);
????dwBaseAddress?
=
?(DWORD)si.lpMinimumApplicationAddress;?
????
while
(dwBaseAddress?
<
?(DWORD)si.lpMaximumApplicationAddress)?

????
{?
????????mbi.BaseAddress?
=
?(LPVOID)dwBaseAddress;?
????????VirtualQueryEx(_hProcess,?(LPVOID)dwBaseAddress,?
&
mbi,?
sizeof
(mbi));
????????dwBaseAddress?
=
?(DWORD)mbi.BaseAddress?
+
?mbi.RegionSize;?
????????
if
(mbi.State?
!=
?MEM_COMMIT?
||
?mbi.AllocationProtect?
!=
?PAGE_READWRITE)?
//
跳過未分配或不可讀寫的區域?
????????
{?
????????????
continue
;?
????????}
?
????????
????????
//
搜索
????????
for
(DWORD?i?
=
?(DWORD)mbi.BaseAddress;?i?
<
?dwBaseAddress;?i
+=
4096
)

????????
{
????????????
if
(
!
ReadProcessMemory(_hProcess,LPCVOID(i),process_mem,
4096
,
&
number_of_bytes_read))
????????????????
break
;????????????
????????????
for
(
int
?j
=
0
;j
<
4096
?
-
?
9
;j
++
)

????????????
{
????????????????
if
(
!
memcmp(
&
process_mem[j],
"
\\MsgEx.db
"
,
9
)?)

????????????????
{
????????????????????
//
printf("begin\n");
????????????????????
for
(
int
?k
=
j
-
1
;?k?
>
?j
-
12
;?k
--
)

????????????????????
{
????????????????????????
if
(process_mem[k]?
>=
?
'
0
'
?
&&
?process_mem[k]?
<=
?
'
9
'
)

????????????????????????
{
????????????????????????????strQQ?
=
??process_mem[k]?
+
?strQQ;
????????????????????????}
????????????????????????
else
????????????????????????????
break
;
????????????????????}
????????????????????
if
(strQQ.length())

????????????????????
{
????????????????????????ResumeThread(_hProcess);
????????????????????????
return
?
true
;
????????????????????}
????????????
????????????????}
????????????}
????????}
????}
????ResumeThread(_hProcess);
????
return
?
false
;
}
HANDLE?GetQQProcess()

{
????PROCESSENTRY32?pe;
????pe.dwSize?
=
?
sizeof
(PROCESSENTRY32);
????HANDLE?hSnapshot?
=
?CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,?
0
);
????Process32First(hSnapshot,?
&
pe);

????
do
{
????????
if
(
!
_tcsicmp(pe.szExeFile,_T(
"
qq.exe
"
)))

????????
{
????????????CloseHandle(hSnapshot);
????????????
return
?OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
????????}
????????pe.dwSize?
=
?
sizeof
(PROCESSENTRY32);
????}
while
(Process32Next(hSnapshot,?
&
pe));
????CloseHandle(hSnapshot);
????
return
?NULL;
}
摘要: #include?
"
stdafx.h
"
#include?
<
iostream
>
#include?
"
ace/INET_Addr.h
"
#include?
...
閱讀全文
2006年11月22日
最近工作比較閑. 因此看了一些書,一些電影.
<設計模式>開始看第二遍.. 感覺實際開發中用不著.. 來公司一年多,項目實在少.真想找個高人帶著我乘風破浪..不說乘風破浪,平時有個人討論都好.
看了一會兒<wxWidgets>. 隨便一個對話框程序都占了幾M內存,文件牛大..算了. 跨平臺現在還用不著,放棄.
看了一會兒<病毒入門>.匯編看得想死..羅云彬老師的Win32匯編書寫得像個<Window程序設計>的翻版.
看了一會兒<Python>. .現在的開發用不著.. 屠龍之技.
昨天發現用Flash做界面真是好. 又漂亮又簡單, 現在的Flash8.0可以很好的和本地程序交互了. 感覺是黑暗中的明燈.
看名字叫<越獄>的電影. 覺得外國連續劇可看性很高..T-Bag是只打不死的小強. 麥克.Scofield真牛. 外國政治也黑暗. 外國監獄真好.? 司法制度真體帖.
覺得自己會用的形容詞很少.盡是些 "真","很","好"
哈哈.
這周末王斌和周芬結婚了. 我要回家參加他們的婚禮. 心情有些許復雜. 難以名狀.?. 盡管如此,我還是要給他們獻上楊某人最誠摯的祝福. 無論如何,一定要幸福.
2006年11月7日
如果我能存時間入瓶??? 我最想做的事情?? 就是保存每個日子??? 直到我們老去?
只為能與你再次共度? 如果我能讓時光永駐? 我會珍藏每個日子? 然后? 再一次? 與你共度
你找到你想做的事情時? 卻總是發現? 已沒有足夠時間?? 我歷經尋尋覓覓? 才發現
你就是那個? 我愿共度一生的人? 如果我有盒子 盛著從未實現的夢與希望
那么它將會空蕩蕩? 除了那些? 你為我圓夢的記憶
2006年10月27日
?一大早醒來,想了很多. 睡不著.
不能再玩游戲了.希望部門的技術氛圍能濃一些, 在一起,不是討論游戲,而是討論技術.
玩了這么些年游戲,得到了什么,失去了什么.不想再作追究.只是不想再為了它失去一些寶貴的東西,譬如時間.
?
2006年10月25日
例?7.14.?處理開始字符
...
>>> phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') 1
>>> phonePattern.search('(800)5551212 ext. 1234').groups() 2
('800', '555', '1212', '1234')
>>> phonePattern.search('800-555-1212').groups() 3
('800', '555', '1212', '')
>>> phonePattern.search('work 1-(800) 555.1212 #1234') 4
>>>
1 |
這個正則表達式和前面的幾乎相同,除了在第一個記憶組(區號)前面匹配\D*,0或者多個非數字字符。注意,此處你沒有記憶這些非數字字符(他們沒有被括號括起來)。如果你發現他們,只是跳過他們,接著只要匹配上就開始記憶區號。
|
?2 |
你可以成功的解析電話號碼,即使在區號前面有一個左括號。(在區號后面的右括號也已經被處理,它被看成非數字字符分隔符,由第一個記憶組后面的 \D*匹配。)
|
?3 |
進行仔細的檢查,保證你沒有破壞前面能夠匹配的任何情況。由于首字符是完全可選的,這個模式匹配字符串的開始,接著是0個非數字字符,接著是一個有三個數字字符的記憶組(800),接著是1個非數字字符(連字符),接著是一個有三個數字字符的記憶組(555),接著是1個非數字字符(連字符),接著是一個有四個數字字符的記憶組(1212),接著是0個非數字字符,接著是一個有0個數字位的記憶組,最后是字符串的結尾。
|
?4 |
此處是正則表達式讓我產生了找一個硬東西挖出自己的眼睛的沖動。為什么這個電話號碼沒有匹配上?因為在它的區號前面有一個 1,但是你認為在區號前面的所有字符都是非數字字符(\D*)。 Aargh. |
2006年10月24日
<載自:Dive Into Python>
你可能經??吹搅_馬數字,即使你沒有意識到他們。你可能曾經在老電影或者電視中看到他們(“版權所有 MCMXLVI” 而不是 “版權所有1946”),或者在某圖書館或某大學的貢獻墻上看到他們(“成立于 MDCCCLXXXVIII”而不是“成立于1888”)。你也可能在某些文獻的大綱或者目錄上看到他們。這是一個表示數字的系統,他能夠真正回溯到遠古的羅馬帝國(因此而得名)。
在羅馬數字中,利用7個不同字母進行重復或者組合來表達各式各樣的數字。
-
I = 1
-
V = 5
-
X = 10
-
L = 50
-
C = 100
-
D = 500
-
M = 1000
下面是關于構造羅馬數字的一些通用的規則的介紹:
- 字符是疊加的。 I表示1, II表示2, 而III表示3. VI 表示 6 (字面上為逐字符相加, “5 加 1”), VII 表示 7, VIII 表示 8.
- 能夠被10整除的字符(I, X, C, 和 M)至多可以重復三次. 對于4, 你則需要利用下一個最大的能夠被5整除的字符進行減操作得到,你不能把4 表示成 IIII; 而應表示為 IV (比“5小 1”)。數字40寫成XL (比50小10), 41 寫成 XLI, 42 寫成 XLII, 43 寫成 XLIII, 而 44 寫成 XLIV (比50 小10, 然后比5小1).
- 類似的,對于數字 9,你必須利用下一個能夠被10整除的字符進行減操作得到: 8 表示為 VIII, 而 9 則表示為 IX (比10 小1), 而不是 VIIII (因為字符I 不能連續重復四次)。數字90 表示為 XC, 900 表示為 CM.
- 被5整除的字符不能重復。數字10 常表示為X, 而從來不用VV來表示。數字100常表示為C, 也從來不表示為 LL.
- 羅馬數字經常從高位到低位書寫,從左到右閱讀,因此不同順序的字符意義大不相同。DC 表示 600; 而CD 是一個完全不同的數字(為400, 也就是比500 小100). CI 表示 101; 而IC 甚至不是一個合法的羅馬字母(因為你不能直接從數字100減去1; 比需要寫成XCIX, 意思是 比100 小10, 然后加上數字9,也就是比 10小1的數字).
|
本章譯者注:“被5整除的數”這個譯法并不嚴謹,因為所有被10整除的數也能夠被5整除,此處表達的含義是:那些包含有5的含義的羅馬數字字符。 |
2006年10月20日
?
#include?
"
stdafx.h
"
#include?
"
ace/OS_NS_time.h
"
#include?
"
ace/Log_Msg.h
"
#include?
"
ace/Reactor.h
"
#include?
"
ace/Event_Handler.h
"
#include?
"
ace/INET_Addr.h
"
#include?
"
ace/SOCK_Dgram.h
"
#include?
"
ace/TP_Reactor.h
"
#include?
"
ace/WFMO_Reactor.h
"
class
?ClientRecv?:?
public
?ACE_Event_Handler

{
public
:

????
virtual
?
~
ClientRecv?()
{}
????
int
?open?(
const
?ACE_INET_Addr?
&
bind_addr);

????
//
?Get?this?handler's?I/O?handle.
????
virtual
?ACE_HANDLE?get_handle?(
void
)?
const
????
{?
return
?
this
->
udp.get_handle();?}
????
virtual
?
int
?handle_input?(ACE_HANDLE?fd?
=
?ACE_INVALID_HANDLE);

????
//
?Called?when?this?handler?is?removed?from?the?ACE_Reactor.
????
virtual
?
int
?handle_close?(ACE_HANDLE?handle,
????????ACE_Reactor_Mask?close_mask);
????
????ACE_SOCK_Dgram?udp;
}
;


int
ClientRecv::open?(
const
?ACE_INET_Addr?
&
bind_addr)

{
????
if
?(
this
->
udp.open?(bind_addr,?
1
)?
==
?
-
1
)
????????ACE_ERROR_RETURN?((LM_ERROR,
????????ACE_TEXT?(
"
%p\n
"
),
????????ACE_TEXT?(
"
udp.open
"
)),
????????
-
1
);
????
????
return
?
this
->
reactor?()
->
register_handler
????????(
this
,?ACE_Event_Handler::READ_MASK?);
}
int
?
ClientRecv::handle_close?(ACE_HANDLE?handle,
??????????????????????????ACE_Reactor_Mask?close_mask)

{
????
if
?(close_mask?
==
?ACE_Event_Handler::WRITE_MASK)
????????
return
?
0
;
????close_mask?
=
?ACE_Event_Handler::ALL_EVENTS_MASK?
|
????????ACE_Event_Handler::DONT_CALL;
????
this
->
reactor?()
->
remove_handler?(
this
,?close_mask);
????
this
->
udp.close();
????delete?
this
;
????
return
?
0
;
}
int
?
ClientRecv::handle_input?(ACE_HANDLE?fd?)

{

????
char
??buffer[
8192
]?
=
?
{
0
}
;
????ACE_INET_Addr??peer_addr;
????
if
(
-
1
?
==
?
this
->
udp.recv(buffer,
8192
,peer_addr))
????????ACE_ERROR_RETURN?((LM_ERROR,
????????ACE_TEXT?(
"
%p\n
"
),
????????ACE_TEXT?(
"
udp.recv
"
)),
????????
-
1
);
????
????ACE_DEBUG((LM_INFO,
"
%s\n
"
,peer_addr.get_host_addr()));
????
return
?
0
;
}
DWORD?WINAPI?LoopThread(LPVOID?lparam)

{
????ACE_Reactor::instance?()
->
run_reactor_event_loop?();
????
return
??
0
;
}
int
?_tmain(
int
?argc,?_TCHAR
*
?argv[])

{
????ACE_INET_Addr?bind_addr(
10703
);
????ClientRecv??client;
????????client.reactor(ACE_Reactor::instance?());??
????
if
(
-
1
?
==
?client.open(bind_addr))

????
{
????????
return
?
-
1
;
????}
????
????CreateThread(NULL,NULL,LoopThread,
0
,
0
,
0
);
????ACE_INET_Addr?send_addr;
????
for
(
int
?i
=
1024
;i
<
3333
;i
++
)

????
{
????????ACE_DEBUG((LM_INFO,
"
%d?\n
"
,i));
????????send_addr.
set
(i,
"
192.168.3.147
"
);
????????Sleep(
5000
);
????????
if
(client.udp.send(
"
ttt
"
,
3
,send_addr)?
==
?
-
1
)

????????
{
????????????ACE_DEBUG((LM_INFO,
"
%p
"
));
????????????
break
;
????????}
????}
????system(
"
pause
"
);
????ACE_Reactor::instance?()
->
end_reactor_event_loop?();
????
return
?
0
;
}
報錯:?
udp.recv:?connection?reset?
p?:?handle?is?not?a?socket?
莫非反應器只能用于TCP? , 沒辦法,先用WSAAsyncSelect吧。
2006年10月9日
?
火車慢慢地往前
煙霧彌漫著思念
纏繞一圈又一圈
沉默的我睜開眼
看著窗外的藍天
窗中的我在流淚
越過你曾說的田
種滿了向日葵
突然哽咽一切一切
我多想回你身邊
乘坐著旋轉木馬的樂園
看幸福轉動得多么甜
我多想回你身邊
走過最初相遇的地點
好讓我再從頭復習一遍
我早已沒有感覺
如果想你多一天
就會傷我多一些
拋開了所有時間
讓自己心情沉淀
好能飛出這世界
越過你曾說的田
種滿了向日葵
我的眼淚抵不去從前
no
2006年10月8日
稀里糊涂的過完了七天。今天下午杰毛粒和他們家的香客發生爭執,生猛的香客把杰毛粒的眼睛踢傷了;文雞上午摩托車被撞了。害我晚上提心吊膽,生怕自己會有什么不測(我們三個同年同月同日生)。還好,現在能寫下這些文字,就證明我什么事都沒有。
晚上去吃鐵板燒,王斌和個蒙古大夫一樣,點了很多東西,吃又吃不完。
因為幫侄女配電腦,認識了一個叫劉昕的可愛小MM。
2006年10月5日
今天7點半起床,到火車站8點,坐車到南站9點。南站人山人海。估計了一下, 排隊要排半個小時,然后買張下午的票,再然后傍晚的時候回家。一天就毀了。毅然離開,坐了到暮云的車,在大托收費站下車,等了一會兒,就有一輛到南岳的中巴過來了。好happy的上了車。到家12點。
下午去見了幾個朋友:杰毛粒做生意,忙得不行?;依鲜笤诩移龇孔印H缓螅覀円黄鹑チ俗杂傻貛С詵|西。王斌過了一會兒也來了。吃完東西,幫灰老鼠的哥哥看電腦,原來電腦被流氓強X了,下了個超級兔子,解決問題,閃人。去伯伯家看爺爺。爺爺不在家,幫小紅姐看電腦,電腦被流氓強X了,下了個超級兔子,除了中文上網,雅虎助手兩個大流氓沒趕跑,其它的都趕跑了。閃人。。。不知道閃到哪去,回家補睡。
晚上睡醒,去莉施剪了個頭發??吹节w尉和她同學竟然也在洗頭發,還帶了個很PP的洋妞。剪完頭發,打了個電話給猴子,喝了一廳可樂,看了一會兒街,我們決定去吃烤魚。打了電話給徒弟,徒弟跟個精武館的弟子約會,接了徒弟過來吃東西。轉眼到十點。吃完東西,我決定去上網,在網上和希希討論什么是BF。下線。吃了碗餃子,餃子店老板很面熟,名字好像叫荷花。
騎著小綿羊轉了幾圈,冷,回家。聽了無數次《全世界失眠》,打開電腦,記下今天做了什么事情。萬一失憶了,憑著這些,興許會記起點什么。
2006年9月19日
《El condor pasa》 是一首反抗西班牙殖民者的南美秘魯民歌,后被Paul Simon重唱組改編,用英文翻唱。這首旋律已經被列入聯合國世界文化遺產了.寧靜,深邃,高遠. 讓人心境明澈,是不可多的的優秀作品.
El Condor Pasa的原版據傳是基于秘魯自由戰士Tupac Amaro的故事。1780年,他在領導一場反抗西班牙人的起義中被害,死后變成一只Condor,永遠翱翔于安第斯山上。秘魯人民暨此體現對自由的追求不息,而歌名的直譯就是"雄鷹在飛"。
I\'d rather be a sparrow than a snail
Yes I would, if I could, I surely would, hm-m
I\'d rather be a hammer than a nail
Yes I would, if I only could, I surely would, hm-m
Away, I\'d rather sail away
Like a swan that\'s here and gone
A man gets tied up to the ground
He gives the world its saddest sound
Its saddest sound
I\'d rather be a forest than a street
Yes I would, if I could, I surely would
I\'d rather feel the earth beneath my feet
Yes I would, if I only could, I surely wou
下載
2006年9月17日
找男朋友了.
今天在步行街吃了一碗酸辣粉+兩串魷魚, 麻得不行, 好像是胃在疼了.?我親愛的胃,我向你保證,下次再也不吃?酸辣粉+兩串魷魚了.
2006年9月13日
A:
t?_tmain(int?argc,?_TCHAR*?argv[])


{

?typedef?int?(WINAPI?*myMsg)(?IN?HWND?hWnd,IN?LPCSTR?lpText,?IN?LPCSTR?lpCaption,IN?UINT?uType);
?HANDLE?m_hDLL?=?::LoadLibrary("user32.dll");
?myMsg?msg?=?(myMsg)GetProcAddress((HMODULE)m_hDLL,?"MessageBoxA");?
?(*msg)(NULL,"TEST","TEST",0);
?
?return?0;
}B:
int?_tmain(int?argc,?_TCHAR*?argv[])


{
????MessageBoxA(NULL,"test","test",0);
????return?0;
}


A生成的exe 的大小? < B
2006年9月8日
韓片.
想起男主角用鞋帶將女主角綁在凳腿上的那幕,就差沒感動得掉眼淚.
2006年9月6日
今天我生病了,好像是吃了什么壞東西,肚子不舒服。請了半天假在寢室睡覺?;叵氤赃^的東西,早上面包,昨晚盒飯。前幾天還開玩笑說,肚子疼不是我疼,我愛吃什么就吃什么?,F在可好。
不喜歡住宿舍。一是因為沒有自己的空間,二是因為最近又不能上網了。 隔壁宿舍把電腦當二手賣了,所以,他們也不關心能不能上網??煽嗔宋?。
因為肚子不舒服,把我塞給它的東西都留著不消化,嘔吐完,納悶:我中午沒吃什么呀,怎么能吐這么多。肚子呀肚子,你可真歷害。
睡了一覺起來,頭暈暈的。我應該去吃點容易消化的東西。
... ...
?
2006年8月31日
#include?
"
ace/Singleton.h
"
#include?
"
ace/Mutex.h
"
#include?
"
ace/Event_Handler.h
"
#include?
<
ace
/
NT_Service.h
>
#include?
<
ace
/
Log_Msg.h
>
#include?
<
iostream
>
using
?
namespace
?std;

class
?MYService:
public
?ACE_NT_Service

{
????
bool
?m_stop;
public
:
????MYService():ACE_NT_Service(
"
MyACEService_4
"
,
0
,ACE_NT_SERVICE_START_TIMEOUT,

????????????SERVICE_WIN32_OWN_PROCESS?
|
?SERVICE_INTERACTIVE_PROCESS),m_stop(
false
)
{
????????}
????
virtual
?
int
?svc?(
void
);
????
virtual
?
void
?handle_control?(DWORD?control_code);

????
virtual
?
~
MYService()
{}
}
;

typedef?ACE_Singleton
<
MYService,?ACE_Mutex
>
?SERVICE;

int
?MYService::svc?(
void
)

{
????report_status?(SERVICE_RUNNING);
????
while
(
!
m_stop)

????
{
????????Sleep(
2000
);
????????MessageBox(NULL,
"
aaa
"
,
"
error
"
,
0
);
????}
????
return
?
0
;
}
void
?MYService::handle_control?(DWORD?control_code)

{
????
if
?(control_code?
==
?SERVICE_CONTROL_SHUTDOWN
????????
||
?control_code?
==
?SERVICE_CONTROL_STOP)

????
{
????????report_status?(SERVICE_STOP_PENDING);
????????m_stop?
=
?
true
;
????}
????ACE_NT_Service::handle_control?(control_code);
}
ACE_NT_SERVICE_DEFINE?(MyACEService_4,
???????????????????????MYService,
???????????????????????ACE_TEXT?(
"
MyACEService_4
"
));

int
?main(
int
?argc,?_TCHAR
*
?argv[])

{
????
????ACE::init?();
????ACE_NT_SERVICE_RUN?(MyACEService_4,
????????SERVICE::instance?(),
????????ret);
????
????ACE::fini?();


/**/
/*
????安裝服務
?????????ACE::init?();
????SERVICE::instance()->insert();
????ACE::fini?();
*/
????
return
?
0
;
}
2006年8月30日
摘要: 分配器?描述
ACE_Allocator?ACE中的分配器類的接口類。這些類使用繼承和動態綁定來提供靈活性。
ACE_Static_Allocator?該分配器管理固定大小的內存。每當收到分配內存的請求時,它就移動內部指針、以返回內存chunk(“大塊”)。它還假定內存一旦被分配,就再也不會被釋放。
ACE_Cached_Allocator?該分配器預先分配內存池,其中含有特定數...
閱讀全文
2006年8月21日
《設計模式》
《ACE卷二》
《OOD》
《Effectivec++》第三版
早一段時候看《道法自然-面向對像》,看到后面幾章看不下去了,通篇的設計模式。沒折,我得好好補上這珍貴的一課。 今天看到第一個模式,抽象工廠。
星際不玩了,每天中午和同事打帝國時代。:)很多人哦。
晚上也不知道玩什么才好。玩了一會極品飛車,老是最后一名,真沒勁。
最近沒有IE了,換了一個新的瀏覽器. "Opera", 挺方便的,看起來也大方.? 按住右鍵搖兩下,頁面就關閉了,很適合我這樣的懶人.你不知道每天找小XX,關閉窗口,得浪費我多大力氣.? 真方便呀真方便.
“咦?兄臺,在下有一事不知道當問不當問?”
“嗯……有什么事,老兄你盡管說。咱們江湖兄弟不必那么文縐縐的,直接點?!?
“好!兄臺果然是爽快之人!我想問的是:兄臺是不是河北神腿門的弟子?”
“嗯……正是!不知道老兄怎么知道的?”
“呵呵,我看兄臺這蹲馬步的姿勢--雙腳腳尖微微向內,雙腿的膝蓋卻向外,小腿與大腿之間的角度成一直角,上身前傾,這便是河北神腿門的基本功嘛?!?
“哈哈,老兄好眼力!嗯……不知道老兄是哪個門派的???”
“說起來咱們算是本家。”
“哦?”
“我是唐山地趟門的。三十年前,咱們本是一家,都屬于神腿門。后來你們神腿門的老掌門沈半城過世之后,他的兒子接管了神腿門,他的侄子沈公子離開神腿門開創了唐山地趟門?!?
“嗯……原來如此,怪不得看老兄你蹲馬步的姿勢跟我差不多呢。嗯……”
“呵呵,我蹲的姿勢和兄臺還是有些區別的。神腿門注重的練腿的力量,我們地趟門練的是輕巧,所以我們蹲馬步和你們有一點不同,我們的雙腳不是平行的,而是一腳微微在前,一腳微微在后,為以后的[急行花步]打基礎?!?
“哈哈,看來老兄是悟性很高的高手啊。嗯……俺是個粗人,不管這些,只管苦練。嗯……”
“呵呵,兄臺過獎了!悟性是一方面,苦練才是最重要的啊!”
“嗯……”
“嗯……嗯……”
“蹲茅房能遇你這樣一個知已,真的很開心!……嗯……”
“我也是……嗯……”
2006年8月4日
一年一度的鬼節,按我們家鄉的說法,每年這個時候,先人就會趁著鬼門關開著,來家里做客. 而我們這些后人就準備好香火紙錢供奉. 今年我在長沙,離家不是很遠.家人打電話要我回家,就為這事.?
我要請兩天假. 當時BOSS正在看SOFTICE,看都沒看請假條,簽了名,啥也沒問,以至于準備好的請假詞匯打了水漂.
在看電影的時候收到一個短信,來自康榮,內容觸目驚心,原文如下:
楊其屋里跟別個打架,楊某給別人砍了!現在在派出所. 你姐夫肖軍也來了.我還不懂為什么事打架.
隨即回了個電話,他說楊旗在醫院,我說明天上午回去.
回去再看看是怎么回事.
往昔與他共渡的日子,歷歷在目.上次見他是劉杰結婚,他喝了個爛醉,抓住劉杰亂說胡話.現在他在醫院.. 我應該怎么辦??上次打架都是三年前的事情了.? 小時候天不怕地不怕,一個混混欺負我, 我回家拿了菜刀,用報紙包著,插在腰間..?? 現在的我,每天坐在電腦前碼字的我,還能回去嗎? 我不知道.
一晚吧,明天早班車回家.
2006年7月18日
在編繹BOOST::Serialization 例子的時候,遇到的錯誤.
??? // if your program traps here, it indicates taht your doing one of the following:
??? // a) serializing an object of a type marked "track_never" through a pointer.
??? // b) saving an non-const object of a type not markd "track_never)
??? // Either of these conditions may be an indicator of an error usage of the
??? // serialization library and should be double checked.? See documentation on
??? // object tracking.
解決:
BOOST_CLASS_TRACKING(MyClass, boost::serialization::track_never)
2006年7月5日
2006年6月29日
樂心真是個才女,還會呤詩
無題
|
|
??? 昨夜又去互動,
?? 盒飯基本沒動。
?? 坐好不許亂動,
?? 累得不想再動。
|
好詩,好詩..
我決定好好向她學習.
2006年6月28日
因為宿舍停電,熱得要S,又要爬十七樓.所以昨天留在公司里了.
發哥和石英男在玩魔獸,我本來是等他們玩完,再一塊回去的.沒想到他們玩到兩點鐘.于是我就躺在沙發上睡著了.
因為沒有枕頭,所以一起來,脖子有點不舒服..酸酸的. 加上一晚上冷氣都開著,一晚上都覺得冷,一晚上都沒睡好.
下樓去買早餐了. ..
2006年6月27日
2006年6月26日
今天白天只睡一小會阿. 怎么又睡不著了.? 
晚上的菜好像放了不少鹽,睡著睡著爬起來喝水.?? 一點睡意都沒阿.? 明天上班又要犯困了. 決定明天去買個牛奶.? 睡前給喝一杯,也不知道管不管用.?
臨睡前吼一聲: 讓我的健美的身材都長滿肥肉吧!!!(
,減肥計劃失敗,,泡不到妞了)
啥P事都沒有. 也不知道寫些什么..
認真睡覺才是王道阿.. 不JJYY了.? .
摘要: 因為進浩方玩星際,每次都要擠房間,所以做了一個擠房間的小工具.VC7.1 工程下載關鍵代碼如下:
??1
typedef?
struct
?_remoteparameter
??2
{????
...
閱讀全文
2006年6月22日
暖和的春天來了,萬物都蘇醒了。蒼蠅媽媽睡了一個冬天,也醒來了。她從泥洞里爬出來,嗡嗡的飛到廁所里,在大便上生下了很多黑黑的、圓圓的卵。
春風輕輕地吹過,太陽光照著。廁所里的糞水越來越暖和了。蒼蠅媽媽下的卵慢慢地都活動起來,變成一群又白又胖的蛆,它們在糞水里游來游去,非??鞓?。
有一天,蟯蟲媽媽帶著她的孩子到化糞池中來游水。小蛆們看見小蟯蟲跟著媽媽在水里劃來劃去,它們一起游到蟯蟲媽媽身邊,喊: “媽媽!媽媽!”
蟯蟲媽媽說道:“我不是你們的媽媽。我是小蟯蟲的媽媽。”小蛆們問蟯蟲媽媽:“蟯蟲媽媽,蟯蟲媽媽,您看見過我們的媽媽嗎?請您告訴我們,我們的媽媽是什么樣的呀?”
蟯蟲媽媽回答說:“看見過。你們的媽媽和你們長得不一樣,你們自己去找吧?!闭f著,急急忙忙地和它的孩子們游走了。
“謝謝您,蟯蟲媽媽!”小蛆們高高興興地向前游去。
這時,一條蛔蟲游過來了。小蛆們看見蛔蟲和它們長得不像,它們想一定是媽媽來了,追上去喊媽媽:“媽媽!媽媽!”
蛔蟲笑著說:“我不是你們的媽媽。我是小蛔蟲的媽媽。你們的媽媽有六條腿,到前面去找吧!”
“謝謝您啦!蛔蟲媽媽!”小蛆們再向前游去。
一只蚊子飛過來了。小蛆們看見蚊子有六條腿,心里想:這回真的是媽媽來了。就追上去喊:“媽媽!媽媽!”
蚊子笑著說:“我不是你們的媽媽。我是小蚊子的媽媽。你們的媽媽長的胖胖的,到前面去找吧?!?br /> “謝謝您啦!蚊子媽媽!”小蛆們再向前游去。
蹲坑邊一只屎殼郎“哼哼”地叫著,推著糞走了過來。小蛆們看見屎殼郎長的胖胖的也長著六只腳,高興地想:這回可真的找到媽媽了。追了上去,連聲大喊:“媽媽!媽媽!”
屎殼郎笑著說:“小朋友,你們認錯了。我不是你們的媽媽,我是小屎殼郎的媽媽。你們的媽媽頭頂上有兩只大眼睛,穿著黑衣服在空中飛,唱起歌來‘嗡嗡嗡’的,你們到前面去找找吧!”
“謝謝您啦!屎殼郎媽媽!”小蛆們再向前游去。
小蛆們游呀、游呀,游到一泡稀屎邊,看見一只蒼蠅坐在黃黃的大便上“嗡嗡嗡”地唱歌,它們趕快游過去,小聲地問:“請問您:您看見了我們的媽媽嗎?她胖胖的,和我們長得一點都不像,頭頂上有兩只大眼睛,有六條腿,穿著黑衣服,唱起歌來‘嗡嗡嗡’的………”
蒼蠅聽了“嗡嗡嗡”地笑起來,她說“唉!傻孩子,我就是你們的媽媽呀!”
小蛆們聽了,一齊搖搖尾巴說:“奇怪!奇怪!我們的樣子為什么跟您不一樣呢?”
蒼蠅媽媽笑著說:“你們還小呢。過幾天你們會變成蛹;再過幾天,你們又會長出六條腿來,等腿長齊了,就跟媽媽一樣了,就可以飛到任何大便上細細地品嘗了?!?br /> 小蛆們聽了,高興地在水里翻起跟頭來:“啊!我們找到媽媽了!我們找到媽媽了!好媽媽,好媽媽,您快到我們這兒來吧!您快到我們這兒來吧!”
蒼蠅媽媽在小蛆們的旁邊飛來飛去,和她的蛆孩子們一塊兒游玩去了。
在天涯看到這個奇惡心的帖子!? 我決定轉過來.
實在想不出有什么好的標題.就寫了個日期了. :)
再過兩個星期,我就上了一年班了.去年7月4號第一天上班.整整一年. 一年里,成長了!成熟了? 或者還有其它變化.. 想不出個所以然來.
2006年6月12日
這一覺睡得可真爽。睡足之后打星際也特別帶狀況,這不,一回都沒輸。 呵呵,盡選菜鳥揉阿。
晚上去趙尉MM去墮落街吃口味蝦,味道美美的,我決定下個星期再去。
花花最近上班很忙
李國帥最近在泡楊小榮
蟲子最近要考英語
趙尉要考四級
劉杰在家忙著生孩子
王斌在家和周芬甜密
何康在家混日子
婷婷在干嘛呢
還有眼鏡妹,放暑假不知道會不會回來
小譚新泡一妞,成天在家ML
... ...
2006年6月11日
明天星期天,現在是凌晨三點多. 打算睡一整天的,所以,現在無論如何都不能睡.
最近一個星期,幾乎每天都是2,3點睡.早上8點半起床..咚咚咚跑到公司.持續一天腦力的消耗.還不覺得累.很久沒有像現在這樣不受打擾的寫下一些文字,記下心情,發發牢騷. 大多數的時候,宿舍會冷不丁的冒出來一個人,對著你的屏幕看兩眼,感到無趣之后,旋即離開.住集體宿舍就是這樣吧.
當我同時想說幾句話的時候,往往一句話也說不出來. 因為不知道先說哪一句才好.??就像載波偵聽協議,一個總線,但要幾臺機器要使用.. 還是要分個條理出來.
現就以下幾點說明近況.
生活:??
?????? 衣:因為夏天來了,所以買了兩背心. :)? 坦胸露背的,不敢穿去上班.雖然我挺喜歡的.涼快嘛.?
?????? 食:我姐說我再胖,就看不得了. 我也這樣想. 所以決定少吃點.早餐就吃一麥片,好容易捱到中午,中午的飯菜比起學校來,要豐富很多.廚師也很到位的搞點有營養的菜色,只是味道嘛.. 不敢恭維.? 暈. 這半夜三更說得吃的,還真有點饞了.晚上沒有公司的吃了. 所以,形式多樣化. 一,去菜市場買菜,自己DIY一頓晚飯(當然大多數時候是室友動手,我負責發表贊美或批評的言論,當然啦,大部分是贊美).? 二,去"一家面館"吃面.我喜歡面食 > 喜歡米粉. 三,回到宿舍,打電話叫盒飯. 四,去朋友那蹭飯.五, 去西餅屋買面包,餅干充饑.
????? 住:住宿舍.有蚊子咬我,蚊子傻B,放著O型血不吸,專吸我這AB型的.怕是想換換口味.如果真是這樣,我就原諒它們.
????? 行:奔波于宿舍與公司之間,倒也不遠, 步行<10分鐘.
工作:
感情:
未完成.. 4點了. 困了,睡了..