怎样在QT下实现多个线程?

ryanzz 2009-07-31 10:57:00


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下像以上方法一样实现多个线程调用呢?
...全文
778 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dnfon 2012-04-28
  • 打赏
  • 举报
回复
这里有个可以开启几百线程的方法,是不是你要的。

http://www.it165.net/pro/html/201204/2247.html
mississipii 2009-08-06
  • 打赏
  • 举报
回复
生成多个实例就可以用了,不清楚可以去看下例子,模仿会简单一些
neohope 2009-08-05
  • 打赏
  • 举报
回复
QT不仅可以多线程吧,还可以同时利用多个核心进行并发处理呢
ryanzz 2009-08-05
  • 打赏
  • 举报
回复
//SampleView.cpp
UINT Thread_list1(LPVOID lpParam)
{
CSampleView *pa;
pa=CSampleViewlpParam;

...

return 0;
}

void SampleView::FUN1()
{
Thread_list1(this);
}

///////////////////////////////
#include <qthread.h>

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

};

void MyThread::run()
{
SampleView vi;
vi.FUN1();
}

int main()
{
MyThread a;
a.start();
a.wait();
}



这样对么?
a263238386 2009-08-05
  • 打赏
  • 举报
回复
楼主去你的qt安装目录里找找,有个examples文件夹,里面有一个threads文件夹,里面有几个例子,看完这几个例子,相信楼主啥都会了
  • 打赏
  • 举报
回复
QThread类本身就是接口,你把需要在子线程做的事情,放到run函数里。
需要用的时候就调用该QThread实例的start即可。

很简单啊,自己看mannual吧。
ryanzz 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 phz1985 的回复:]
从QThread派生子类,重新实现run()方法。
[/Quote]

难道每实现一个线程就要派生一个类?
不能在一个类里实现吗?
phz1985 2009-07-31
  • 打赏
  • 举报
回复
从QThread派生子类,重新实现run()方法。
ryanzz 2009-07-31
  • 打赏
  • 举报
回复
只知道QThread中可以通过run()函数实现一个线程,如果要实现多个线程呢?
phz1985 2009-07-31
  • 打赏
  • 举报
回复
Qt中类QThread,用于实现多线程。你看一下文档。
yhf365 2009-07-31
  • 打赏
  • 举报
回复
如果完成的功能相同的话,
可以多个线程用同一个类啊,

或者通过参数使每个从QThread继承的类完成不同的功能。
ShowMan 2009-07-31
  • 打赏
  • 举报
回复
(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().

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧