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多线程之一:子线程中创建的对象不应再其他线程中被调用,包括使用槽函数的形式

#ifndef WORKTHREAD_H #define WORKTHREAD_H #include #include "DataBaseObject.h" #include "HttpObject...

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

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

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

#include "displaythread.h" #include "mainwindow.h" DisplayThread::DisplayThread(MainWindow *pWindow...

QT线程调用界面函数

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

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

近来用Qt编写一段多线程的TcpSocket通信程序,被其中Qt中报的几个warning搞晕了,一会儿是说“Cannot create children for a parent that is in...
  • ZXGIS
  • ZXGIS
  • 2013年12月08日 12:55
  • 841

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

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

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

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

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

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

QT学习之 如何启动一个线程

先给出相关代码,然后加以分析 //*************dialog.h**************//   #ifndef DIALOG_H #define DIALOG_H #includ...

Qt学习之如何启动一个线程

先来给出每个文件的相关代码然后再加以分析 //*************dialog.h**************//   #ifndef DIALOG_H #define DIALOG_H...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt 创建一个线程执行某个函数
举报原因:
原因补充:

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