2008年8月21日 星期四

C下MultiThread的function

int _tmain(int argc, _TCHAR* argv[])
{
// Step 1: 建立 thread 並且暫停
HANDLE hThread=(HANDLE) _beginthread(myThreadFun,0,NULL);
SuspendThread(hThread);

// Step 2: 設定thread 的 priority level
SetThreadPriority(hThread,THREAD_PRIORITY_IDLE);

// Step 3: 重新啟動 thread
ResumeThread(hThread);

// 執行工作
for(int i=0;i<1000;i++)
cout << i << " primary thread" << endl;

WaitForSingleObject(hThread,INFINITE);
return 0;
}

2008年8月13日 星期三

JAVA util套件

Pattern & Matcher
正規表示法
. * [ABC] [A-C]
/d /D /s /S 這些在用的時候要多加個/
也就是//d //D ......

Pattern ptn = Pattern.compile("JAVA [EMS]{2}.*");
Matcher mch = ptn.matcher("JAVA SE 5.0");
matches()可以return是否有完整match
find()可以return是否字串中有符合的片段
有的話可以用start()end()來return起始位置與結束位置+1
replaceAll(String str)來把裡面所有符合表示法的片段換為str
並return結果字串

而不必搭配Matcher的split()
可以利用String[] a = ptn.split(str)
來將str這個字串,用正規表示法指出的片段來分割

Formatter
Formatter f = new Formatter(System.out)可以用來獲得標準輸出
而f.format("")可以用來輸出
若constructor內餵StringBuffer則可以輸出到StringBuffer
這情況下f.format()此時會變為append的方法來加入字串
若constructor內餵File("xxx.xxx")
則會輸出到這個檔案 (這個狀況下要用try-catch)
且要用close()
%b boolean %s String %h 16進位hashcode
%c Character %d Integer %o 8進位Integer %x 16進位Integer
%e 浮點數的指數表示法 %f浮點數一般表示法 %g 依精確度格式化的浮點數
%a 16進位指數表示法的浮點數

Scanner
Scanner sc = new Scanner(System.in);
可以用來獲得鍵盤輸入
sc.next() 可以獲得字串輸入
sc.nextInt()可以獲得Integer輸入

JAVA Generics(泛型)

對於多個不同的class
若基本的邏輯相同,可利用泛型,只定義一個class


public class GenericFoo <T> {
private T foo;
public void setFoo(T foo) {this.foo = foo; }
public T getFoo() {return foo;}
}

也能用public class ListGenericFoo <T extends List>
來限制T只能是number的子類別

然而<?>與<? extends number>則是用在變數或參數的宣告
限制這變數只能裝載這些限定的型別
*不過使用?宣告的reference不能用來加入新的資訊
只能取得它的資訊或是移除它的資訊

Java Exception

Runtime Exception不需要用try catch包起來

override父類別的method時,原method若有throws
新的method可以throws原exception範圍內的exception
或不throws