2007年6月8日 星期五

如何在Multi-thread的架構下,以pthread實作Event

如何在Multi-thread的架構下,以pthread實作Event的作法:
我們常在其它的Embedded OS中使用Event的機制來達到Process之間的通訊,但在Linux中卻沒有Event的機制可供使用,此時您可以以這個方法來達成!

.我們可以宣告一個指定數目的Array做為Event的宣告。
.而Array中的每一個Element就當作是一個Event Bit。
.然後,我們可以為每一個欲等待的Event建立一個monitor thread,然後使用thread的condition Variable來等待該Event被設立。
.當Event被設立(Condition Variable的狀態為TRUE時),monitor thread就會被喚醒,它就可以通知等待此Event的thread。

詳細Sample Code待日後找個時間再Post出來!

2007年6月1日 星期五

如何解決在Java中出現亂碼的問題?

這個問題發生的原因是在Java的字型目錄中少了中文字型,可以將系統的字型連結過去,即可解決!
$cd /usr/java/jre1.6.0_01/lib/fonts/
$ln -s /usr/share/fonts/truetype/arphic/bkai00mp.ttf bkai00mp.ttf
$ln -s /usr/share/fonts/truetype/arphic/uming.ttf uming.ttf

重新啟用Java程式即可使用中文!

如何解決在linux上無法使用Freemind的問題?

最近為了在Linux上使用Freemind,從網路下載了最新版的Freemind下來使用,不料,新版的Freemind需要新版的JAVA才能使用(新版的Freemind使用了新的JAVA功能),此時竟發現新版的JAVA並未被放入Debian套件庫中(似乎是一些License的顧慮,Sun好像沒有完全開放),這下子Freemind卡在Java套件而無法使用。
為解決這個問題,我到了http://www.java.com/zh_TW/網站下載Java Runtime Environment Version 6 Update 1,我下載了jre-6u1-linux-i586.bin來使用,依下列步驟執行安裝:
$su
$cd /usr
$mkdir java
$cd java
$cp ~/jre-6u1-linux-i586.bin .
$chmod a+x jre-6u1-linux-i586.bin
$./jre-6u1-linux-i586.bin

將/usr/bin目錄下的java連結連結到所安裝的目錄
$cd /usr/bin
$mv java java-old
$ln -s /usr/java/jre1.6.0_01/bin/java java

這時侯再去執行Freemind就可以正確執行了!

如何知道PIPE或Socket的另一端已經斷線或關閉fd?

當您使用write()API來進行資料的傳送時,若此時PIPE或Socket發生斷線,或是對方關閉fd時,除了write()API會回傳error外,另外會收到errno=EPIPE的錯誤碼及SIGPIPE訊號會被觸發,這裡要小心,SIGPIPE訊號的預設對應動作是關閉程式,如果您沒有打算關閉程式,應該要把SIGPIPE的Handler改為SIG_IGN。