Qt实现睡眠的几种方法

来源:互联网 发布:java判断链表是否有环 编辑:程序博客网 时间:2024/05/16 19:09

widget.h

#include <QWidget>namespace Ui {class Widget;}class Widget : public QWidget{    Q_OBJECTpublic:    explicit Widget(QWidget *parent = 0);    ~Widget();public:    void elapsed_QTime(int ms);    void elapsed_QElapsedTimer(int ms);    void elapsed_qWait(int ms);    void elapsed_QEventLoop(int ms);    void elapsed_qSleep(int ms);    void elapsed_msleep(int ms);    void elapsed_QwaitCondition(int ms);private slots:    void on_pushButton_clicked();private:    Ui::Widget *ui;private://    typedef void (*myElapsed)(int);//no};

widget.cpp

#include "widget.h"#include "ui_widget.h"#include <QTime>#include <QElapsedTimer>#include <QTest>#include <QTimer>#include <QThread>#include <QWaitCondition>typedef void (Widget::*myElapsed[])(int);myElapsed mE = {    &Widget::elapsed_QTime,    &Widget::elapsed_QElapsedTimer,    &Widget::elapsed_qWait,    &Widget::elapsed_QEventLoop,    &Widget::elapsed_qSleep,    &Widget::elapsed_msleep,    &Widget::elapsed_QwaitCondition};Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);}Widget::~Widget(){    delete ui;}void Widget::elapsed_QTime(int ms){    QTime t;    t.start();//    while(t.elapsed() < ms);//no response    while(t.elapsed() < ms)//response        QCoreApplication::processEvents();}void Widget::elapsed_QElapsedTimer(int ms)//response{    QElapsedTimer t;    t.start();    while(t.elapsed() < ms)        QCoreApplication::processEvents();}void Widget::elapsed_qWait(int ms)//response{    QTest::qWait(ms);}void Widget::elapsed_QEventLoop(int ms)//response{    QEventLoop eventLoop;    QTimer::singleShot(ms, &eventLoop, SLOT(quit()));    eventLoop.exec();}void Widget::elapsed_qSleep(int ms)//no response{    QTest::qSleep(ms);}void Widget::elapsed_msleep(int ms)//no response{    qDebug() << "elapsed_msleep";    QThread::msleep(ms);}void Widget::elapsed_QwaitCondition(int ms){    QMutex mutex;    QWaitCondition sleep;    mutex.lock();    sleep.wait(&mutex, ms);    mutex.unlock();}void Widget::on_pushButton_clicked(){    (this->*mE[4])(1000);}