嵌入式linux input模块-select

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;
                }
            }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值