日期:2014-05-16  浏览次数:20596 次

怎样在QT下实现多个线程?
C/C++ code


UINT Thread_list1(LPVOID lpParam)
{
    CSampleView *pa;
    pa=CSampleViewlpParam;
    
    ...

    return 0;
}

UINT Thread_list2(LPVOID lpParam)
{
    CSampleView *pa;
    pa=CSampleViewlpParam;
    
    ...

    return 0;
}

UINT Thread_list3(LPVOID lpParam)
{
    CSampleView *pa;
    pa=CSampleViewlpParam;
    
    ...

    return 0;
}


void CSampleView::Button1()
{
    AfxBeginThread(Thread_list1,this,THREAD_PRIORITY_ABOVE_NORMAL);
}

void CSampleView::Button2()
{
    AfxBeginThread(Thread_list2,this,THREAD_PRIORITY_NORMAL);
}

void CSampleView::Button3()
{
    AfxBeginThread(Thread_list3,this,THREAD_PRIORITY_NORMAL);
}



以上为vc下实现多个线程的方法(如有不当,请帮忙指出),
如何在QT下像以上方法一样实现多个线程调用呢?

------解决方案--------------------
Qt中类QThread,用于实现多线程。你看一下文档。
------解决方案--------------------
从QThread派生子类,重新实现run()方法。
------解决方案--------------------
QThread类本身就是接口,你把需要在子线程做的事情,放到run函数里。
需要用的时候就调用该QThread实例的start即可。

很简单啊,自己看mannual吧。
------解决方案--------------------
(1)用VC6.0新建个Win32 Console Application工程

(2)Project Settings里面Link标签页面添加qtmain.lib qt-mt320.lib
Project Settings里面C/C++标签页面添加QT_THREAD_SUPPORT

(3)源代码文件(main.cpp):

#include <qthread.h>

class MyThread : public QThread 
{
public:
virtual void run();

};

void MyThread::run()
{
for( int count = 0; count < 20; count++ ) 
{
sleep( 1 );
qDebug( "Ping!" );
}
}

int main()
{
MyThread a;
MyThread b;
a.start();
b.start();
a.wait();
b.wait();
}
注释:
This will start two threads, each of which writes Ping! 20 times to the screen and exits. 
The wait() calls at the end of main() are necessary because exiting main() ends the program, 
unceremoniously killing all other threads.
Each MyThread stops executing when it reaches the end of MyThread::run(), 
just as an application does when it leaves main().
------解决方案--------------------
如果完成的功能相同的话,
可以多个线程用同一个类啊,

或者通过参数使每个从QThread继承的类完成不同的功能。

------解决方案--------------------
QT不仅可以多线程吧,还可以同时利用多个核心进行并发处理呢
------解决方案--------------------
楼主去你的qt安装目录里找找,有个examples文件夹,里面有一个threads文件夹,里面有几个例子,看完这几个例子,相信楼主啥都会了
------解决方案--------------------
生成多个实例就可以用了,不清楚可以去看下例子,模仿会简单一些