zoukankan      html  css  js  c++  java
  • epoll 实际使用

    void DataHandle::recv() {
        sleep(2);
        _data_router -> readInfoHw(&mInfo);
        ALOGD(SYS_LOG_TAG "readInfoHW: conn=%d, init=%d, numC=%d, MAC=%s",
                mInfo.isBTConnected, mInfo.isBTInitialized, mInfo.numClient, mInfo.BTMACaddr);
        ALOGD(SYS_LOG_TAG "readInfoHW: sentP=%lld, recvP=%lld, dropP=%lld, sentB=%lld, recvB=%lld",
                mInfo.sentPacket, mInfo.recvPacket, mInfo.dropPacket,
                mInfo.sentByte, mInfo.recvByte);
        ALOGD(SYS_LOG_TAG "before begin recv.........................");
        bool mac_st = false;
        if (strlen(mInfo.BTMACaddr) > 0) {
            mac_st = SysWatcher::instance()->setMacAddr(mInfo.BTMACaddr);
        }
        int dfd = _data_router->getReadFd();
        struct epoll_event event;
        struct epoll_event * _events;
        int efd = epoll_create1(0);
        if (efd == -1) {
            perror("epoll_create");
            abort();
        }
        event.data.fd = dfd;
        event.events = EPOLLIN | EPOLLET;
        int s = epoll_ctl(efd, EPOLL_CTL_ADD, dfd, &event);
        if (s == -1) {
            perror("epoll_ctl");
            abort();
        }
        _events = (epoll_event *) calloc(MAXEVENTS, sizeof(event));
        int done;
        string message;
        const int RECV_BUF_DEPTH = 200;
        char buf[RECV_BUF_DEPTH] = { 0 };
        while (1) {

    int n, i; n = epoll_wait(efd, _events, MAXEVENTS, -1); for (i = 0; i < n; i++) { if ((_events[i].events & EPOLLERR) || (_events[i].events & EPOLLHUP) || (!(_events[i].events & EPOLLIN))) { ALOGD(SYS_LOG_TAG " SysWatcher::EPOLLERR||EPOLLHUP||!EPOLLIN "); fprintf(stderr, "epoll error "); close(_events[i].data.fd); continue; } else if (dfd == _events[i].data.fd) { ssize_t count; memset(buf, 0, RECV_BUF_DEPTH); /* count = read(_events[i].data.fd, buf, RECV_BUF_DEPTH); if (count == -1) { // If errno == EAGAIN, that means we have read all data. So go back to the main loop. if (errno != EAGAIN) { perror("read"); done = 1; ALOGD(SYS_LOG_TAG " SysWatcher:: errno != EAGAIN "); } ALOGD(SYS_LOG_TAG " SysWatcher:: errno == EAGAIN "); break; } else if (count == 0) { //��ʱ // End of file. The remote has closed the connection. done = 1; ALOGD(SYS_LOG_TAG "SysWatcher::recv() DISCONNECTED."); break; }*/ message = string(buf); ALOGD(SYS_LOG_TAG " SysWatcher Recive Data from BLEPare data=%s ", buf); bool dis_st = RouterSysWatcher::dispath(message); message = ""; memset(buf, 0, RECV_BUF_DEPTH); if (dis_st) { ALOGD(SYS_LOG_TAG "dispath sucess! dis_ret =%d", dis_st); } else {  
    ALOGD(SYS_LOG_TAG "dispath error! dis_ret =%d", dis_st); continue; } ALOGD(SYS_LOG_TAG " Epoll test, buf = %s, count =%d", buf, count); } } _data_router -> readInfoHw(&mInfo); if (strlen(mInfo.BTMACaddr) > 0 and mac_st == false) { mac_st = SysWatcher::instance()->setMacAddr(mInfo.BTMACaddr); ALOGD(SYS_LOG_TAG "......readInfoHW: conn=%d, init=%d, numC=%d, MAC=%s", mInfo.isBTConnected, mInfo.isBTInitialized, mInfo.numClient, mInfo.BTMACaddr); } } free(_events); _events = 0; close(dfd); }

  • 相关阅读:
    华为超级应用联合创新计划启动,共同打造极致用户体验
    华为P20无敌拍摄能力开放 如何即刻获得?
    两千万次服务的背后,华为终端开放实验室到底做了什么?
    HUAWEI HiAI亮相华为开发者生态大会 助力应用AI开发实现加速度
    搜狐新闻APP是如何使用HUAWEI DevEco IDE快速集成HUAWEI HiAI Engine
    旅行助手:重新定义旅行
    世界更清晰,搜狐新闻客户端集成HUAWEI HiAI 亮相荣耀Play发布会!
    Android和设置alpha(图像)透明度
    Android应用开发欢迎界面不想显示最上面的LOGO
    聊天页面输入框和发送按钮的布局问题 Android
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/4773859.html
Copyright © 2011-2022 走看看