Qt里创建子线程时,传入this指针出现问题
初学Linux下Qt编程,在设计一个简单的聊天程序的时候,使用到了线程。但是线程处理函数不属于UI界面类里面的成员函数,无法在线程处理函数中使用UI界面上的控件。于是我在创建线程的时候,传入了this指针。并且该线程处理函数已经申明成为全局函数和主界面类的友元函数。编译无错,运行时会发生卡死或者异常退出等问题。貌似功能代码设计没有问题,多次测试发现此时传入进来的this指针,在该函数中使用后就会发生这种问题。
请教下这样使用this传入到底有没有问题,有没有要改进的地方。毕业论文
具体代码如下:
头文件:(cli.h)
...
void* pthread_func(void*); //线程处理函数
namespace Ui {
class Cli;
}
class Cli : public QMainWindow
{
Q_OBJECT
public:
explicit Cli(QWidget *parent = 0);
friend void* pthread_func(void*); //申明为友元函数
...
cli.cpp文件:
...
void Cli::on_startconnect_clicked() //单击“连接”后
{
...
//创建线程
if(pthread_create(&ntid,NULL,pthread_func,(void*)this) < 0)
{
QMessageBox::about(this,"error","pthread_create");
return ;
}
....
}
//线程处理函数,用于循环接受对方发送来的消息,并显示到界面上
void* pthread_func(void* tothis)
{
Cli* mythis = (Cli*)tothis; //定义临时变量,获取this指针