採用select的方式實現多輸入

2021-10-01 16:10:40 字數 1580 閱讀 8187

while(1

)else

if(tinputevent.ival == input_val_up)

else

if(tinputevent.ival == input_val_exit)

}}

這樣的做的明顯缺陷是:

select機制:

參考:unix環境高階程式設計 i/o多路轉接

監測多個檔案,只要有某乙個檔案可讀/可寫/異常或超時,即返回

int

select

(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,

struct timeval *timeout)

;

nfds:最大檔案控制代碼+1

readfds:監視這些檔案描述符的讀變化,即在這個集合中是否有我們關心的檔案描述符可讀了。

writefds:被監測是否可寫的檔案,同上。

exceptfds:被監測是否有異常的檔案,同上。

timeout:超時時間。當寫為0的時候表示查詢:不管有沒有變化都返回。當寫為null的時候表示:無論等多長時間,知道我關心的這些集合中有檔案描述符發生了期望的變化。

返回值:當有檔案描述符發生了期望的變化,返回變化的數量。

為什麼select可以降低cpu的佔用率?因為select的監測是休眠監測。

程式修改

static

inttsdevinit

(void

)else

/*環境鍊錶中,tslib_tsdevice未註冊*/if(

!g_pttsdev)if(

ts_config

(g_pttsdev))if

(getdispresolution

(&g_ixres,

&g_iyres)

)/*獲取顯示屏的解析度*/

/*解析度由fbdeviceinit函式從底層獲取,因此觸控螢幕需要在fb(lcd)初始化之後再初始化*/

g_ttsdevinptopr.ifd=

ts_fd

(g_pttsdev)

;/*獲取控制代碼*/

return0;

}

typedef

struct inputopr t_inputopr,

*pt_inputopr;

int

allinputdevicesinit

(void

)else

return-1

;}return0;

}

事件處理函式:

int

getinputevent

(pt_inputeventopr ptinputevent)

/*事件處理,或者叫事件查詢*/

pttemp = pttemp->ptnext;

/*沒有發生該事件隨即查詢鍊錶中另乙個事件*/}}

return-1

;}

資料庫採用select方式拼接insert

方法 select insert into zq department values depart id depart name depart fullname company id depart admin depart type depart security created depart pa...

ActionBar的使用方式 Selector

我覺得重點不在actionbar上面了,寫完actionbar之後應該就是selector和shape attr這些xml檔案了。實現actionbar的格式 menu main.xml要寫成這樣,其實就是新增多個item,並對這些item的text和圖示包括大小進行設定。預設的已經有乙個item,...

LU 分解,採用行連續劃分方式下的 MPI 實現

include stdio.h include stdlib.h include mpi.h define a x,y a x m y a為m m矩陣 define a x,y a x m y define l x,y l x m y define u x,y u x m y define floa...