亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qeventdispatcher_unix.cpp

?? QT 開發(fā)環(huán)境里面一個很重要的文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qplatformdefs.h"#include "qcoreapplication.h"#include "qpair.h"#include "qsocketnotifier.h"#include "qthread.h"#include "qeventdispatcher_unix_p.h"#include <private/qthread_p.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>Q_CORE_EXPORT bool qt_disable_lowpriority_timers=false;/***************************************************************************** UNIX signal handling *****************************************************************************/static sig_atomic_t signal_received;static sig_atomic_t signals_fired[NSIG];static void signalHandler(int sig){    signals_fired[sig] = 1;    signal_received = 1;}QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate(){    extern Qt::HANDLE qt_application_thread_id;    mainThread = (QThread::currentThreadId() == qt_application_thread_id);    // initialize the common parts of the event loop    pipe(thread_pipe);    fcntl(thread_pipe[0], F_SETFD, FD_CLOEXEC);    fcntl(thread_pipe[1], F_SETFD, FD_CLOEXEC);    fcntl(thread_pipe[0], F_SETFL, fcntl(thread_pipe[0], F_GETFL) | O_NONBLOCK);    fcntl(thread_pipe[1], F_SETFL, fcntl(thread_pipe[1], F_GETFL) | O_NONBLOCK);    sn_highest = -1;    interrupt = false;}QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate(){    // cleanup the common parts of the event loop    close(thread_pipe[0]);    close(thread_pipe[1]);    // cleanup timers    qDeleteAll(timerList);}int QEventDispatcherUNIXPrivate::doSelect(QEventLoop::ProcessEventsFlags flags, timeval *timeout){    Q_Q(QEventDispatcherUNIX);    int nsel;    do {        if (mainThread) {            while (signal_received) {                signal_received = 0;                for (int i = 0; i < NSIG; ++i) {                    if (signals_fired[i]) {                        signals_fired[i] = 0;                        emit QCoreApplication::instance()->unixSignal(i);                    }                }            }        }        // Process timers and socket notifiers - the common UNIX stuff        int highest = 0;        FD_ZERO(&sn_vec[0].select_fds);        FD_ZERO(&sn_vec[1].select_fds);        FD_ZERO(&sn_vec[2].select_fds);        if (! (flags & QEventLoop::ExcludeSocketNotifiers) && (sn_highest >= 0)) {            // return the highest fd we can wait for input on            if (!sn_vec[0].list.isEmpty())                sn_vec[0].select_fds = sn_vec[0].enabled_fds;            if (!sn_vec[1].list.isEmpty())                sn_vec[1].select_fds = sn_vec[1].enabled_fds;            if (!sn_vec[2].list.isEmpty())                sn_vec[2].select_fds = sn_vec[2].enabled_fds;            highest = sn_highest;        }        FD_SET(thread_pipe[0], &sn_vec[0].select_fds);        highest = qMax(highest, thread_pipe[0]);        nsel = q->select(highest + 1,                         &sn_vec[0].select_fds,                         &sn_vec[1].select_fds,                         &sn_vec[2].select_fds,                         timeout);    } while (nsel == -1 && (errno == EINTR || errno == EAGAIN));    if (nsel == -1) {        if (errno == EBADF) {            // it seems a socket notifier has a bad fd... find out            // which one it is and disable it            fd_set fdset;            timeval tm;            tm.tv_sec = tm.tv_usec = 0l;            for (int type = 0; type < 3; ++type) {                QList<QSockNot *> &list = sn_vec[type].list;                if (list.size() == 0)                    continue;                for (int i = 0; i < list.size(); ++i) {                    QSockNot *sn = list.at(i);                    FD_ZERO(&fdset);                    FD_SET(sn->fd, &fdset);                    int ret = -1;                    do {                        switch (type) {                        case 0: // read                            ret = select(sn->fd + 1, &fdset, 0, 0, &tm);                            break;                        case 1: // write                            ret = select(sn->fd + 1, 0, &fdset, 0, &tm);                            break;                        case 2: // except                            ret = select(sn->fd + 1, 0, 0, &fdset, &tm);                            break;                        }                    } while (ret == -1 && (errno == EINTR || errno == EAGAIN));                    if (ret == -1 && errno == EBADF) {                        // disable the invalid socket notifier                        static const char *t[] = { "Read", "Write", "Exception" };                        qWarning("QSocketNotifier: Invalid socket %d and type '%s', disabling...",                                 sn->fd, t[type]);                        sn->obj->setEnabled(false);                    }                }            }        } else {            // EINVAL... shouldn't happen, so let's complain to stderr            // and hope someone sends us a bug report            perror("select");        }    }    // some other thread woke us up... consume the data on the thread pipe so that    // select doesn't immediately return next time    int nevents = 0;    if (nsel > 0 && FD_ISSET(thread_pipe[0], &sn_vec[0].select_fds)) {        char c[16];        while (::read(thread_pipe[0], c, sizeof(c)) > 0)            ;        if (!wakeUps.testAndSetRelease(1, 0)) {            // hopefully, this is dead code            qWarning("QEventDispatcherUNIX: internal error, wakeUps.testAndSetRelease(1, 0) failed!");        }        ++nevents;    }    // activate socket notifiers    if (! (flags & QEventLoop::ExcludeSocketNotifiers) && nsel > 0 && sn_highest >= 0) {        // if select says data is ready on any socket, then set the socket notifier        // to pending        for (int i=0; i<3; i++) {            QList<QSockNot *> &list = sn_vec[i].list;            for (int j = 0; j < list.size(); ++j) {                QSockNot *sn = list.at(j);                if (FD_ISSET(sn->fd, &sn_vec[i].select_fds))                    q->setSocketNotifierPending(sn->obj);            }        }    }    return (nevents + q->activateSocketNotifiers());}/* * Internal functions for manipulating timer data structures.  The * timerBitVec array is used for keeping track of timer identifiers. */QTimerInfoList::QTimerInfoList(){    getTime(watchtime);}void QTimerInfoList::updateWatchTime(const timeval &currentTime){    if (currentTime < watchtime)        // clock was turned back        timerRepair(watchtime - currentTime);    watchtime = currentTime;}/*  insert timer info into list*/void QTimerInfoList::timerInsert(QTimerInfo *ti){    int index = size();    while (index--) {        register const QTimerInfo * const t = at(index);        if (!(ti->timeout < t->timeout))            break;    }    insert(index+1, ti);}/*  repair broken timer*/void QTimerInfoList::timerRepair(const timeval &diff){    // repair all timers    for (int i = 0; i < size(); ++i) {        register QTimerInfo *t = at(i);        t->timeout = t->timeout - diff;    }}/*  Returns the time to wait for the next timer, or null if no timers  are waiting.*/bool QTimerInfoList::timerWait(timeval &tm){    timeval currentTime;    getTime(currentTime);    updateWatchTime(currentTime);    if (isEmpty())        return false;    QTimerInfo *t = first();        // first waiting timer    if (currentTime < t->timeout) {        // time to wait        tm = t->timeout - currentTime;    } else {        // no time to wait        tm.tv_sec  = 0;        tm.tv_usec = 0;    }    return true;}QEventDispatcherUNIX::QEventDispatcherUNIX(QObject *parent)    : QAbstractEventDispatcher(*new QEventDispatcherUNIXPrivate, parent){ }QEventDispatcherUNIX::QEventDispatcherUNIX(QEventDispatcherUNIXPrivate &dd, QObject *parent)    : QAbstractEventDispatcher(dd, parent){ }QEventDispatcherUNIX::~QEventDispatcherUNIX(){ }int QEventDispatcherUNIX::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,                                 timeval *timeout){    Q_D(QEventDispatcherUNIX);    if (timeout) {        // handle the case where select returns with a timeout, too        // soon.        timeval tvStart = d->timerList.watchtime;        timeval tvCurrent = tvStart;        timeval originalTimeout = *timeout;        int nsel;        do {            timeval tvRest = originalTimeout + tvStart - tvCurrent;            nsel = ::select(nfds, readfds, writefds, exceptfds, &tvRest);            getTime(tvCurrent);        } while (nsel == 0 && (tvCurrent - tvStart) < originalTimeout);        return nsel;    }    return ::select(nfds, readfds, writefds, exceptfds, timeout);}/*!    \internal*/void QEventDispatcherUNIX::registerTimer(int timerId, int interval, QObject *obj){    if (timerId < 1 || interval < 0 || !obj) {        qWarning("QEventDispatcherUNIX::registerTimer: invalid arguments");        return;    } else if (obj->thread() != thread() || thread() != QThread::currentThread()) {        qWarning("QObject::startTimer: timers cannot be started from another thread");        return;    }    QTimerInfo *t = new QTimerInfo;                // create timer    t->id = timerId;    t->interval.tv_sec  = interval / 1000;    t->interval.tv_usec = (interval % 1000) * 1000;    timeval currentTime;    getTime(currentTime);    t->timeout = currentTime + t->interval;    t->obj = obj;    t->inTimerEvent = false;    Q_D(QEventDispatcherUNIX);    d->timerList.timerInsert(t);                                // put timer in list}/*!    \internal*/bool QEventDispatcherUNIX::unregisterTimer(int timerId){    if (timerId < 1) {        qWarning("QEventDispatcherUNIX::unregisterTimer: invalid argument");        return false;    } else if (thread() != QThread::currentThread()) {        qWarning("QObject::killTimer: timers cannot be stopped from another thread");        return false;    }    Q_D(QEventDispatcherUNIX);    // set timer inactive    for (int i = 0; i < d->timerList.size(); ++i) {        register QTimerInfo *t = d->timerList.at(i);        if (t->id == timerId) {            d->timerList.removeAt(i);            delete t;            return true;        }    }    // id not found    return false;}/*!    \internal*/bool QEventDispatcherUNIX::unregisterTimers(QObject *object){    if (!object) {        qWarning("QEventDispatcherUNIX::unregisterTimers: invalid argument");        return false;    } else if (object->thread() != thread() || thread() != QThread::currentThread()) {        qWarning("QObject::killTimers: timers cannot be stopped from another thread");        return false;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频一区二区三区| 国产乱码精品一品二品| 欧美性猛片xxxx免费看久爱| 国产精品久久久久久久久免费樱桃| 国产乱人伦偷精品视频免下载| 久久久久亚洲综合| 国产福利不卡视频| 亚洲丝袜美腿综合| 在线播放一区二区三区| 精彩视频一区二区三区| 国产精品区一区二区三| 91网站最新地址| 亚洲国产一区二区三区青草影视| 欧美视频三区在线播放| 美女视频免费一区| 国产精品久久久久久久久久免费看 | 亚洲综合网站在线观看| 欧美精品第1页| 黑人精品欧美一区二区蜜桃| 国产精品动漫网站| 欧美色图天堂网| 秋霞午夜av一区二区三区| 国产欧美日韩久久| 欧美日韩国产一级二级| 国产一区二区三区黄视频 | 欧美日韩高清在线播放| 狠狠狠色丁香婷婷综合久久五月| 欧美国产日韩一二三区| 欧美系列亚洲系列| 国产麻豆视频一区| 亚洲成国产人片在线观看| 久久久久久综合| 欧美日韩一区二区三区在线看| 激情久久五月天| 亚洲男同1069视频| 精品国产区一区| 色88888久久久久久影院野外| 捆绑紧缚一区二区三区视频| 亚洲欧美怡红院| 欧美一级欧美三级在线观看| aaa欧美大片| 麻豆精品久久精品色综合| 亚洲婷婷综合色高清在线| 日韩一区和二区| 色妞www精品视频| 狠狠狠色丁香婷婷综合激情| 亚洲自拍偷拍av| 日本一区二区成人| 欧美变态tickle挠乳网站| 欧美伊人久久大香线蕉综合69| 国产综合久久久久久鬼色 | 免费成人美女在线观看.| 亚洲欧洲www| 久久综合av免费| 欧美一区二区三区四区在线观看| 91老师片黄在线观看| 国产不卡视频一区二区三区| 日本午夜一区二区| 亚洲一区二区欧美激情| 一色屋精品亚洲香蕉网站| 久久品道一品道久久精品| 91精品国产综合久久久久久| 欧美性受xxxx| 91成人免费在线| 91在线视频播放| jizzjizzjizz欧美| 福利视频网站一区二区三区| 久久99在线观看| 久久99精品久久久久婷婷| 丝袜诱惑制服诱惑色一区在线观看| 亚洲免费伊人电影| 亚洲同性同志一二三专区| 中文字幕中文在线不卡住| 国产精品久久影院| 国产精品久久久久影院| 1区2区3区国产精品| 综合久久久久综合| 亚洲精品国产无天堂网2021 | 日本韩国一区二区三区视频| 色婷婷综合久久久| 欧美无砖砖区免费| 欧美日韩午夜精品| 91精选在线观看| 日韩一区二区电影在线| 欧美一区二区高清| 精品国产一区二区精华| 精品sm在线观看| 国产亲近乱来精品视频| 国产女同性恋一区二区| 中文字幕一区二区三区在线播放| 18成人在线观看| 一区二区免费在线| 人人精品人人爱| 美女精品一区二区| 国产精品综合久久| www.成人在线| 欧洲国内综合视频| 日韩欧美成人一区| 中文字幕欧美日韩一区| 一区二区三区日韩欧美| 三级不卡在线观看| 国产麻豆欧美日韩一区| 成人福利视频在线看| 日本久久电影网| 日韩午夜小视频| 欧美激情一区不卡| 亚洲图片欧美一区| 国产综合色精品一区二区三区| 丁香六月综合激情| 欧美视频日韩视频| 亚洲精品在线网站| 一区二区三区在线不卡| 麻豆一区二区99久久久久| 成人av资源站| 日韩一级完整毛片| 国产精品国产三级国产aⅴ中文| 一区二区三区精品视频在线| 毛片一区二区三区| 91女神在线视频| 精品乱人伦一区二区三区| 成人免费在线视频| 国内偷窥港台综合视频在线播放| 97精品国产97久久久久久久久久久久| 欧美理论片在线| 国产精品女同一区二区三区| 丝袜美腿成人在线| youjizz国产精品| 精品欧美一区二区三区精品久久| 亚洲人成精品久久久久| 久久国产精品99久久人人澡| 色素色在线综合| 欧美激情一区二区在线| 热久久久久久久| 色一区在线观看| 欧美经典三级视频一区二区三区| 日韩精品1区2区3区| 91碰在线视频| 亚洲国产精品99久久久久久久久| 午夜精彩视频在线观看不卡| 99热在这里有精品免费| 2023国产一二三区日本精品2022| 日韩专区在线视频| 欧洲av一区二区嗯嗯嗯啊| 国产精品久久久久久久蜜臀| 国产一区二三区好的| 91精品福利在线一区二区三区 | 午夜精品久久久久久久99水蜜桃 | 亚洲精品一区二区三区影院 | 中文字幕一区二区三区四区 | 成人免费视频一区二区| 欧美videos中文字幕| 亚洲电影一级黄| 在线精品视频免费播放| 亚洲色图欧美在线| 9人人澡人人爽人人精品| 国产亚洲精品超碰| 韩国一区二区视频| 精品国产区一区| 极品尤物av久久免费看| 欧美一级一级性生活免费录像| 亚洲成人久久影院| 欧美制服丝袜第一页| 亚洲精品成人精品456| www.av亚洲| 亚洲免费观看高清| 一本大道综合伊人精品热热| 亚洲色图一区二区| 91国产免费看| 亚洲一区二区三区国产| 欧美日韩情趣电影| 日韩专区在线视频| 欧美一区二区三区日韩视频| 奇米在线7777在线精品| 日韩欧美国产一区在线观看| 喷白浆一区二区| 亚洲精品一区二区三区四区高清| 久久精品国产77777蜜臀| 久久日一线二线三线suv| 韩国三级电影一区二区| 亚洲国产精品成人综合色在线婷婷 | 午夜精品久久一牛影视| 欧美日韩一级片在线观看| 午夜电影网亚洲视频| 日韩一二三区不卡| 国产一区二区三区免费| 日本一区二区视频在线观看| 99v久久综合狠狠综合久久| 一区二区三区中文免费| 欧美亚洲一区二区在线观看| 天堂成人国产精品一区| 精品国产一区二区三区不卡| 成人免费毛片app| 亚洲最大成人网4388xx| 91精品在线免费| 国产a区久久久| 亚洲第一成年网| 337p粉嫩大胆色噜噜噜噜亚洲| 不卡av在线网| 视频一区免费在线观看| 国产日韩欧美a|