Skip to content

isliulin/TaoThread

Repository files navigation

对Qt QThread的简单封装。

Qt的线程有两种场景。

如果是比较独立的任务,不需要交互的,直接QThread::run, 或者QRunable, QtConcurrent都可以。

如果是要交互的,就得QObject moveToThread,或者别的什么事件机制的写法。有交互的情况下,如果用前面的那几种,得自己管事件循环,不然会把UI卡住。

而我这种signal(lambda)的玩法,不会卡住UI,还能像run一样方便。

--

2019/6/13更新

前面那种方式删掉了,因为有局限,不方便复用。

改成线程池了,更加好用。

直接调用封装好的 ThreadPool::getInstance()->work() 函数即可,传递两个lambda作为参数。 第一个lambda是线程池里运行的任务。需要返回任务结果为true 或者false。 第二个lambda是任务结束后,在主线程执行的任务。带一个bool参数为任务的执行结果。

ThreadPool::getInstance()->work(
                [id](){
                    qWarning() << QThread::currentThreadId() << "do" << id;
                    return true;
                },
                [this, id](bool result){
                    qWarning() <<QThread::currentThreadId() << "work result:" << result << id;
                    showId();
                });

Releases

No releases published

Packages

No packages published