前景:
C#中的多线程举例

private Thread threadDownLoadParameter; threadDownLoadParameter = new Thread(new ThreadStart(parameterInterface.downParameterLoadData)); //parameterInterface 实例对象,downParameterLoadData 方法 threadDownLoadParameter.Start();

qt中对应的多线程的使用举例
目标类继承QThread 覆写虚函数function run()

#include #include #include class ParameterI: public QObject{Q_OBJECTpublic slots:void downParameterLoadData(){// 在这里实现 downParameterLoadData 方法的功能qDebug() << "downParameterLoadData executed on thread" << QThread::currentThreadId();}};class DownloaderThread : public QThread{public:void run() override{// 在这里创建 ParameterI实例,并调用 downParameterLoadDataParameterIparameterInterface;parameterInterface.downParameterLoadData();}};int main(int argc, char *argv[]){QCoreApplication a(argc, argv);// 创建 DownloaderThread 实例DownloaderThread downloaderThread;// 启动线程downloaderThread.start();// 等待线程结束downloaderThread.wait();return a.exec();}

补充: 2023年12月27日
线程类 QThread

// 和调用 exit() 效果是一样的// 代用这个函数之后, 再调用 wait() 函数[slot] void QThread::quit();// 启动子线程[slot] void QThread::start(Priority priority = InheritPriority);// 线程退出, 可能是会马上终止线程, 一般情况下不使用这个函数[slot] void QThread::terminate();// 线程中执行的任务完成了, 发出该信号// 任务函数中的处理逻辑执行完毕了[signal] void QThread::finished();// 开始工作之前发出这个信号, 一般不使用[signal] void QThread::started(); 

大丙
使用方式:
①需要创建一个线程类的子类,让其继承QT中的线程类 QThread
②重写父类的 run() 方法,在该函数内部编写子线程要处理的具体的业务流程
③在主线程中创建子线程对象,new 一个就可以了
④启动子线程, 调用 start() 方法

class MyThread:public QThread{ protected:void run(){........}}③MyThread * subThread = new MyThread;④subThread->start();ps:不能在类的外部调用run() 方法启动子线程,在外部调用start()相当于让run()开始运行【见于connect操作时,接收的对象的不同

特别留意:
当子线程别创建出来之后,父子线程之间的通信可以通过信号槽的方式,注意事项:

在Qt中在子线程中不要操作程序中的窗口类型对象, 不允许, 如果操作了程序就挂了
只有主线程才能操作程序中的窗口对象, 默认的线程就是主线程, 自己创建的就是子线程