本站提供最佳道家网站源码服务,欢迎转载和分享。

【小浣熊ai源码】【智能视频系统源码】【极客购源码】qtime源码

2024-12-28 20:12:40 来源:hyperf源码下载 分类:百科

1.Blinky实例分析来认识一下QP状态机
2.qt是什么意思?
3.如何让 Qt 程序 Sleep
4.如何让 Qt 的程序使用 Sleep

qtime源码

Blinky实例分析来认识一下QP状态机

       Blinky实例是一个基本的示例,用于理解QP状态机。其功能是每秒以1Hz的频率闪烁LED灯,具体为每0.5秒亮灯,然后每0.5秒熄灭。这个例子被称作“Hello World!”,小浣熊ai源码因为它展示了QP的基本概念。

       在开始深入理解之前,让我们了解一下QM(状态机管理器)软件。通过调整设置,可以改变模式,这个选项在视图中可见。接下来,创建一个QM工程。

       一旦打开工程,可以查看目录结构。工程中通常包含一系列快捷键,智能视频系统源码方便操作,建议熟悉这些快捷键以提高效率。

       对于具体代码和功能,Blinky应用只包含一个名为Blinky的活动对象,该对象仅使用了QP的最基本功能。在应用中,main函数负责初始化QP框架和bsp包,然后定义并运行Blinky对象。极客购源码

       状态机是Blinky的核心部分,它描述了对象如何在不同状态之间转换。在状态机中,初始转换由QP事件(如QTimeEvt_armX)触发,每隔半秒投递一次超时信号。QTimeEvt_armX函数用于设置时间事件。

       当进入“off”状态时,执行关闭LED的wap封装app源码操作。在“off”状态接收到TIMEOUT事件后,状态会迁移到“on”,此时执行关闭LED的操作。反之,当“on”状态接收到TIMEOUT事件,状态会跳转到“off”,执行关闭LED操作,形成循环。柳州海源码头

       有趣的是,控制LED灯的操作并非直接通过GPIO接口,而是调用封装好的BSP(硬件抽象层),避免了直接访问硬件的复杂性。这意味着,状态机实现代码(blinky.c)对不同硬件平台保持一致,仅需调整bsp包。

       工程中的blinky.c源代码展示了主要逻辑。最终效果是LED灯的闪烁,但因没有硬件支持,实际展示被省略。这个例子帮助用户入门,理解状态机的基本概念。

       总结来说,Blinky实例是一个简洁的QP状态机应用,用于演示基本操作和硬件抽象层的概念。尽管QP是一个复杂且深奥的框架,通过实例学习能有效提升理解。在实际应用中,深入理解状态机的工作原理和硬件抽象层的重要性是关键。如有不准确或需要补充的地方,欢迎指正。

qt是什么意思?

Qt是一个年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展。

       QT指心电图QT,间期缩短是指从QRS波群开始到T波结束的时间缩短,即心室去极化和复极全过程缩短。通常可分为原发性短QT综合征和继发性短QT综合征。

       其实QT也能应用在手机操作系统上面,但是因为Android一般情况下都是使用Java和kotlin,而IOS本身就有了Objective-C和Swift,所以一般情况下,在移动端的设备上应用的并不多,但是随着技术的发展,未来说不定会有着改变。

如何让 Qt 程序 Sleep

       ä½¿ç”¨å¹³å°ç›¸å…³çš„ Sleep 或 nanosleep 以后,界面为什么没有反应?QThread 中提供了protected 权限的 sleep 函数,如何用到主线程中?使用QTest 中的 qSleep,在windows下如何隐藏控制台?这些问题其实归结为一点:在主线程中使用这些函数是一种错误,这会直接导致界面无法刷新,用户与程序无法交互。Qt不提供,是因为你不需要在主线程中使用 sleep 函数。如何让程序等待一段时间QTimeQTime t; t.start(); while(t.elapsed()<);这种死循环也是一种常见错误用法。但改成正确的还是比较简单的:QTime t; t.start(); while(t.elapsed()<) QCoreApplication::processEvents();不停地处理事件,以使得程序保持响应。QElapsedTimer这是Qt4.7引入的新的类,和QTime相比,它提供了更快的计算 elapsed 时间的方法。QElapsedTimer t; t.start(); while(t.elapsed()<) QCoreApplication::processEvents();QTest::qWait这是QTest模块提供的等待函数下面是其源代码(和我们前面的代码很像吧?):namespace QTest { inline static void qWait(int ms) { Q_ASSERT(QCoreApplication::instance()); QElapsedTimer timer; timer.start(); do { QCoreApplication::processEvents(QEventLoop::AllEvents, ms); QTest::qSleep(); } while (timer.elapsed() < ms); } ...其实没什么魔力,对吧?但是因为它QTest模块,所以在程序中我们不要使用它。QEventLoop配合QTimer使用局部的 eventLoop 也是一个不错的选择。例子: QEventLoop eventloop; QTimer::singleShot(, &eventloop, SLOT(quit())); eventloop.exec();QTimer 和 QBasicTimer这两个和本文没有什么直接关系,QTimer估计大家都很熟了。而QBasicTimer估计很少有人用。与QTimer相比,QBasicTimer更快速、轻量、底层。与QTimer相比,它不是QObject的派生类。跨平台的sleep尽管一开始我们就说了,不需要这个东西。但不排除某种场合下,你确实需要这个东西。橹械暮��芗虻ィ╳indows下调用Sleep,其他平台调用 nanosleep):void QTest::qSleep(int ms) { QTEST_ASSERT(ms > 0); #ifdef Q_OS_WIN Sleep(uint(ms)); #else struct timespec ts = { ms / , (ms % ) * * }; nanosleep(&ts, NULL); #endif }看QThread的源码,windows下同样直接调用Sleep,但非windows的实现比这个就复杂多了:/* \internal helper function to do thread sleeps, since usleep()/nanosleep() aren't reliable enough (in terms of behavior and availability)*/staticvoidthread_sleep(structtimespec *ti){ pthread_mutex_tmtx;pthread_cond_tcnd;pthread_mutex_init(&mtx, 0);pthread_cond_init(&cnd, 0);pthread_mutex_lock(&mtx); (void) pthread_cond_timedwait(&cnd, &mtx, ti);pthread_mutex_unlock(&mtx);pthread_cond_destroy(&cnd);pthread_mutex_destroy(&mtx);}voidQThread::sleep(unsignedlongsecs){ structtimevaltv;gettimeofday(&tv, 0);structtimespecti;ti.tv_sec = tv.tv_sec + secs;ti.tv_nsec = (tv.tv_usec * );thread_sleep(&ti);}

如何让 Qt 的程序使用 Sleep

       Qt 为何没有提供 Sleep

       è®ºå›ä¸Šä¸æ—¶è§åˆ°æœ‰äººé—®ï¼š

       Qt 为什么没有提供跨平台的 sleep 函数?

       ä½¿ç”¨å¹³å°ç›¸å…³çš„ Sleep 或 nanosleep 以后,界面为什么没有反应?

       QThread 中提供了protected 权限的 sleep 函数,如何用到主线程中?

       ä½¿ç”¨ QTest 中的 qSleep,在windows下如何隐藏控制台?

       è¿™äº›é—®é¢˜å…¶å®žå½’结为一点:在主线程中使用这些函数是一种错误,这会直接导致界面无法刷新,用户与程序无法交互。

       Qt不提供,是因为你不需要在主线程中使用 sleep 函数。

       å¦‚何让程序等待一段时间

       QTime

       QTime t;

       t.start();

       while(t.elapsed()<);

       è¿™ç§æ­»å¾ªçŽ¯ä¹Ÿæ˜¯ä¸€ç§å¸¸è§é”™è¯¯ç”¨æ³•ã€‚但改成正确的还是比较简单的:

       QTime t;

       t.start();

       while(t.elapsed()<)

        QCoreApplication::processEvents();

       ä¸åœåœ°å¤„理事件,以使得程序保持响应。

       QElapsedTimer

       è¿™æ˜¯Qt4.7引入的新的类,和QTime相比,它提供了更快的计算 elapsed 时间的方法。

       QElapsedTimer t;

       t.start();

       while(t.elapsed()<)

        QCoreApplication::processEvents();

       QTest::qWait

       è¿™æ˜¯QTest模块提供的等待函数

       ä¸‹é¢æ˜¯å…¶æºä»£ç ï¼ˆå’Œæˆ‘们前面的代码很像吧?):

       namespace QTest

       {

        inline static void qWait(int ms)

        {

        Q_ASSERT(QCoreApplication::instance());

        QElapsedTimer timer;

        timer.start();

        do {

        QCoreApplication::processEvents(QEventLoop::AllEvents, ms);

        QTest::qSleep();

        } while (timer.elapsed() < ms);

        }

       ...

       å…¶å®žæ²¡ä»€ä¹ˆé­”力,对吧?但是因为它QTest模块,所以在程序中我们不要使用它。

       QEventLoop

       é…åˆQTimer使用局部的 eventLoop 也是一个不错的选择。例子:

        QEventLoop eventloop;

        QTimer::singleShot(, &eventloop, SLOT(quit()));

        eventloop.exec();

       QTimer 和 QBasicTimer

       è¿™ä¸¤ä¸ªå’Œæœ¬æ–‡æ²¡æœ‰ä»€ä¹ˆç›´æŽ¥å…³ç³»ï¼ŒQTimer估计大家都很熟了。而QBasicTimer估计很少有人用。

       ä¸ŽQTimer相比,QBasicTimer更快速、轻量、底层。

       ä¸ŽQTimer相比,它不是QObject的派生类。

       è·¨å¹³å°çš„sleep

       å°½ç®¡ä¸€å¼€å§‹æˆ‘们就说了,不需要这个东西。但不排除某种场合下,你确实需要这个东西。如何实现一个跨平台的 sleep 呢?

       æˆ‘们一开始也提到了,QThreadç±» 和 QTest模块都提供了sleep函数,其实我们只需要看看他们的源码就够了:

       QTest 模块中的函数很简单(windows下调用Sleep,其他平台调用 nanosleep):

       void QTest::qSleep(int ms)

       {

        QTEST_ASSERT(ms > 0);

       #ifdef Q_OS_WIN

        Sleep(uint(ms));

       #else

        struct timespec ts = { ms / , (ms % ) * * };

        nanosleep(&ts, NULL);

       #endif

       }

       çœ‹QThread的源码,windows下同样直接调用Sleep,但非windows的实现比这个就复杂多了:

       [cpp] view plain copy

       /* /internal

        helper function to do thread sleeps, since usleep()/nanosleep()

        aren't reliable enough (in terms of behavior and availability)

       */

       static void thread_sleep(struct timespec *ti)

       {

        pthread_mutex_t mtx;

        pthread_cond_t cnd;

        pthread_mutex_init(&mtx, 0);

        pthread_cond_init(&cnd, 0);

        pthread_mutex_lock(&mtx);

        (void) pthread_cond_timedwait(&cnd, &mtx, ti);

        pthread_mutex_unlock(&mtx);

        pthread_cond_destroy(&cnd);

        pthread_mutex_destroy(&mtx);

       }

       void QThread::sleep(unsigned long secs)

       {

        struct timeval tv;

        gettimeofday(&tv, 0);

        struct timespec ti;

        ti.tv_sec = tv.tv_sec + secs;

        ti.tv_nsec = (tv.tv_usec * );

        thread_sleep(&ti);

       }

【本文网址:http://abssuliao.net/news/5d572294272.html 欢迎转载】

copyright © 2016 powered by 皮皮网   sitemap