Qt 创建一个线程执行某个函数

原创 2015年07月09日 11:08:42

某个函数需要用线程执行时,创建一个一次性的线程,在线程里面调用该函数。



头文件

class TaskThread : public QThread
{
    Q_OBJECT


public:
    TaskThread(QObject *parent = 0);
    ~TaskThread();
    void setFunction(QObject* obj,QString function,QVariant value=NULL);
signals:
    void taskEnd();
public:
    void run();
private:
    int m_index;
    QObject* m_obj;
    QString m_function;
    QVariant m_value;
    QThread *m_Thread;
};


cpp

TaskThread::TaskThread(QObject *parent)
{
    m_index = -1;
    connect(this,SIGNAL(taskEnd()),this,SLOT(deleteLater()));
}
TaskThread::~TaskThread()
{

}

void TaskThread::setFunction(QObject* obj,QString function,QVariant value)
{
    while(m_index != -1)
    {
        QThread::msleep(10);
    }
    m_index = 1;

    m_obj = obj;
    m_function = function;
    m_value = value;
    m_Thread = m_obj->thread();
    m_obj->moveToThread(this);
    start();
}

void TaskThread::run()
{
    QByteArray ba = m_function.toLatin1();
    const char* ch=ba.constData();    
    QMetaObject::invokeMethod(m_obj,ch,Q_ARG(QVariant, m_value));
    m_index = -1;
    m_obj->moveToThread(m_Thread);
    emit taskEnd();
}


QT线程调用界面函数

Qt的线程要继承QThread,重写实现run函数。 1:如果只是逻辑计算,可以直接在线程类中实现; 2:如果在线程中想要调用界面函数,不可直接调用;则需要: (1):在线程中声明一个信号signal...
  • chinabinlang
  • chinabinlang
  • 2013年11月24日 17:04
  • 3739

QT总结第2篇:在QT中创建一个线程

在本篇,会实现一个非常简单的线程。 一.创建一个工程 就是在QT总结第一篇介绍的,创建一个mainwindow。 二.在main.cpp中创建线程 整个代码中,我加入了大量的注释,很容易就...
  • u010741715
  • u010741715
  • 2013年10月12日 11:07
  • 2824

Qt使用多线程的一些心得——1.继承QThread的多线程使用方法

摘要 Qt多线程方法1 继承QThread 1写一个继承于QThread的线程 2 QThread的几个函数quitexitterminate函数 3 正确的终止一个线程 4 如何正确启动一个线程 4...
  • czyt1988
  • czyt1988
  • 2017年03月22日 08:29
  • 15477

QT学习之路————如何创建一个线程

1、简介     Qt中的QThread类提供了平台无关的线程。一个QThread代表了一个在应用程序中可以独立控制的线程,它与进程中的其他线程分享数据,但是是独立执行的。相对于一般的程序都是从mai...
  • huangan_xixi
  • huangan_xixi
  • 2016年03月13日 14:04
  • 6860

利用QT的QThread将一个类中的成员函数转到线程下执行

#include "displaythread.h" #include "mainwindow.h" DisplayThread::DisplayThread(MainWindow *pWindow...
  • bukajiushang
  • bukajiushang
  • 2017年04月17日 09:58
  • 1409

Qt:让任意线程执行一个匿名函数

本类主要功能是在当前线程(比如说主线程),让任意一个线程(比如说某个工作线程)去执行一个匿名函数。 也可以理解为投放一个回调到任意线程去执行。 我觉得用“投放”这个词形容比较合适。 两个主要...
  • wsj18808050
  • wsj18808050
  • 2015年11月20日 19:26
  • 2172

qt线程动态回调被调类中的函数

实现qt线程动态回调函数
  • zhang_ruiqiang
  • zhang_ruiqiang
  • 2015年07月20日 19:16
  • 1188

Qt 多线程编程中的对象线程与函数执行线程

近来用Qt编写一段多线程的TcpSocket通信程序,被其中Qt中报的几个warning搞晕了,一会儿是说“Cannot create children for a parent that is in...
  • xzh_blue
  • xzh_blue
  • 2015年09月11日 15:46
  • 721

Qt多线程之一:子线程中创建的对象不应再其他线程中被调用,包括使用槽函数的形式

#ifndef WORKTHREAD_H #define WORKTHREAD_H #include #include "DataBaseObject.h" #include "HttpObject...
  • u013148209
  • u013148209
  • 2016年06月25日 09:34
  • 1500

Qt多线程学习:创建多线程

【为什么要用多线程?】 传统的图形用户界面应用程序都只有一个执行线程,并且一次只执行一个操作。如果用户从用户界面中调用一个比较耗时的操作,当该操作正在执行时,用户界面通常会冻结而不再响应。这个问题可...
  • xipiaoyouzi
  • xipiaoyouzi
  • 2012年12月29日 15:44
  • 68152
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt 创建一个线程执行某个函数
举报原因:
原因补充:

(最多只允许输入30个字)