佚名通过本文主要向大家介绍了qthread,qt qthread,qthread start,qthread wait,qthread sleep等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:关于QThread多线程乱序的解决方法
描述:
class SendAndRecv:public Qthread
{
public:
SendAndRecv();
~SendAndRecv();
...
protected:
void run();
...
}
class ReadData:public Qthread
{
public:
ReadData();
~ReadData();
...
protected:
void run();
...
}
在主界面头文件中加上
SendAndRecv send_and_recv;
ReadData reader;
然后在主界面按钮的槽函数中添加
send_and_recv.start();
send_and_recv.wait();
reader.start();
reader.wait();
一开始总是会出现乱序的问题,界面上的按钮一点击程序就直接崩溃了,
后来我想了一个办法:
首先在两个QThread派生类的析构函数中都加上线程的退出或阻塞
SendAndRecv::~SendAndRecv()
{
quit();
wait();
}
ReadData::~ReadData()
{
quit();
wait();
}
然后删除主函数中的
SendAndRecv send_and_recv;
ReadData reader;
并声明两个函数
void SocketCall();
void Reader();
函数实现时
void Work::SocketCall()
{
...
SendAndRecv send_and_recv;
send_and_recv.start();
}
void Work::Reader()
{
...
ReadData reader;
reader.start();
}
然后在槽函数中调用
void Work::on_PushButton_clicked()
{
SocketCall();
Reader();
}
程序就可以正常运行了,也没有再出现线程乱序的现象,我想问的是这样做真的可行吗?
如果可行的话又是如何实现线程退出或阻塞转入下一个线程的呢?
描述:
多线程类class线程QT
定义QThread的派生类class SendAndRecv:public Qthread
{
public:
SendAndRecv();
~SendAndRecv();
...
protected:
void run();
...
}
class ReadData:public Qthread
{
public:
ReadData();
~ReadData();
...
protected:
void run();
...
}
在主界面头文件中加上
SendAndRecv send_and_recv;
ReadData reader;
然后在主界面按钮的槽函数中添加
send_and_recv.start();
send_and_recv.wait();
reader.start();
reader.wait();
一开始总是会出现乱序的问题,界面上的按钮一点击程序就直接崩溃了,
后来我想了一个办法:
首先在两个QThread派生类的析构函数中都加上线程的退出或阻塞
SendAndRecv::~SendAndRecv()
{
quit();
wait();
}
ReadData::~ReadData()
{
quit();
wait();
}
然后删除主函数中的
SendAndRecv send_and_recv;
ReadData reader;
并声明两个函数
void SocketCall();
void Reader();
函数实现时
void Work::SocketCall()
{
...
SendAndRecv send_and_recv;
send_and_recv.start();
}
void Work::Reader()
{
...
ReadData reader;
reader.start();
}
然后在槽函数中调用
void Work::on_PushButton_clicked()
{
SocketCall();
Reader();
}
程序就可以正常运行了,也没有再出现线程乱序的现象,我想问的是这样做真的可行吗?
如果可行的话又是如何实现线程退出或阻塞转入下一个线程的呢?