select相对于轮询的优势
轮询占用cpu率高;select等有数据时才获取,cpu占用率低
检测cpu占用率linux命令
top
select函数
监测多个文件,只要有某一个文件可读/可写/异常或超时,即返回
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);
nfds:最大文件句柄+1(fd最大值) ;readfds(fd_set):被监测是否可读的文件、被监测是否可写的文件、被监测是否有异常的文件
select使用方式(用select函数监测stdin,touchscreen, 有数据时再调用它们的GetInputEvent或获得具体事件)
参考man select 的example例子,这里1-4步在AllInputDevicesInit,5-6在GetInputEvent
1、先获得stdin和touchscreen的fd
2、初始化fd_set为0
FD_ZERO(&g_tRFds);
3、设置fd,将文件描述符fd添加到set中,设置对应的位为1。
FD_SET(ptTmp->iFd, &g_tRFds);
4、找到fd的最大值,从stdin和ouchscreen
if (g_iMaxFd < ptTmp->iFd)
g_iMaxFd = ptTmp->iFd;
5、使用select进行文件检测,如果iRet > 0,则有输入(这里时间设置为0)
iRet = select(g_iMaxFd, &g_tRFds, NULL, NULL, NULL);
6、判断fd是否被设置,检查是否被fd_set,如果有,则获得输入event
if (FD_ISSET(ptTmp->iFd, &g_tRFds))
{
if(0 == ptTmp->GetInputEvent(ptInputEvent))
{
return 0;
}
}