2009年3月26日 星期四

C語言監控IO

最近在寫R232的連線程式,一開始的做法是使用timer定期去抓buffer裡的資料

但由於程式要求的資料量不大,此方法會造成cpu無謂的loading

但最近再翻GTK時,突然發現一個好用的函式如下↓


gint gdk_input_add( gint source,GdkInputCondition condition,
GdkInputFunction function, gpointer data);

這個函式可以監控IO當資料有所進出時,可執行自訂函數。

參數1: source 即為檔案描述器

參數2: condition 為要監控的模式
GDK_INPUT_READ 當檔案描述器有資料可供讀取時,則執行自訂函數
GDK_INPUT_WRITE 當檔案描述器已準備好可寫入時,則執行自訂函數

參數3: function 自訂函數名稱

參數4: 傳入自訂函式之參數

回傳值: 傳回一個標籤tag,可用此標籤移除對IO的監控如下↓
void gdk_input_remove(gint tag);

自訂函式宣告格式:
void input_callback( gpointer data,
gint source,
GdkInputCondition condition );

原先使用timer方式讀取IO,CPU的負載平均30~40%左右

使用此方法負載確只有20%,很明顯此方式可有效降低負載。 :)

沒有留言:

張貼留言