码迷,mamicode.com
首页 > 其他好文 > 详细

5.2使用select,poll

时间:2016-04-03 16:04:51      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

 

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)
{
    /* ó?selectoˉêy?à2astdin,touchscreen 
        óDêy?Yê±?ú?òμ÷ó??àó|μ?GetInputEventoˉêy?ò??μ???ì?ê±??
    */
    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;
}

5.2使用select,poll

标签:

原文地址:http://www.cnblogs.com/CZM-/p/5349924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!