zoukankan      html  css  js  c++  java
  • 5.2使用select,poll

    5.2 使用select,poll   // CPU占用率低,适用于很多简单场合

    参考:UNIX环境高级编程 I/O多路转接

    监测多个文件,只要有某一个文件可读/可写/异常或超时,即返回
    int select(int nfds,    fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);
                    最大文件句柄+1   被监测是否可读的文件                                         超时时间
                                                   被监测是否可写的文件
                                                                    被监测是否有异常的文件
       

    修改

    int AllInputDevicesInit(void)
    {
        PT_InputOpr ptTmp = g_ptInputOprHead;
        int iError = -1;
    
        FD_ZERO(&g_tRFds);
    
        while (ptTmp)
        {
            if (0 == ptTmp->DeviceInit())
            {
                FD_SET(ptTmp->iFd, &g_tRFds);
                if (g_iMaxFd < ptTmp->iFd)
                    g_iMaxFd = ptTmp->iFd;
                iError = 0;
            }
            ptTmp = ptTmp->ptNext;
        }
    
        g_iMaxFd++;
        return iError;
    }
    
    int GetInputEvent(PT_InputEvent ptInputEvent)
    {
        /* ÓÃselectº¯Êý¼à²âstdin,touchscreen 
            ÓÐÊý¾ÝʱÔÚÎÒµ÷ÓÃÏàÓ¦µÄGetInputEventº¯Êý»ò»ñµÃ¾ßÌåʱ¼ä
        */
        PT_InputOpr ptTmp = g_ptInputOprHead;
        fd_set tRFds;
        int iRet;
    
        tRFds = g_tRFds;
    
        iRet = select(g_iMaxFd, &tRFds, NULL, NULL, NULL);
        if (iRet > 0)
        {
            while (ptTmp)
            {
                if (FD_ISSET(ptTmp->iFd, &tRFds))
                {
                    if(0 == ptTmp->GetInputEvent(ptInputEvent))
                    {
                        return 0;
                    }
                }
                ptTmp = ptTmp->ptNext;
            }
        }
        return -1;
    }
  • 相关阅读:
    c#基础之Type
    .Net IOC框架入门之三 Autofac
    EF的三种数据加载方式
    EntityFramework扩展之第三方类库
    EF Codefirst入门之创建数据库
    EasyUI combotree的使用
    MacOS 安装 gdb 踩过的坑
    enex 转 md 格式的几种方式(免费版/氪金版)
    C++ 标准库之 iomanip 、操作符 ios::fixed 以及 setprecision 使用的惨痛教训经验总结
    python list 中 remove 的骚操作/易错点
  • 原文地址:https://www.cnblogs.com/CZM-/p/5349924.html
Copyright © 2011-2022 走看看