加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – pthread_create函数中的第四个参数

发布时间:2020-12-16 09:39:54 所属栏目:百科 来源:网络整理
导读:像这样的代码: int code = pthread_create(d-thread_id,attr,QThreadPrivate::start,this); 哪个QThreadPrivate :: start是一个静态函数. 那么,第四个参数有什么用呢?如果将其替换为NULL,有什么区别? 解决方法 这是一个常见的习语.您想要启动一个线程,但
像这样的代码:

int code = pthread_create(&d->thread_id,&attr,QThreadPrivate::start,this);

哪个QThreadPrivate :: start是一个静态函数.

那么,第四个参数有什么用呢?如果将其替换为NULL,有什么区别?

解决方法

这是一个常见的习语.您想要启动一个线程,但您希望该线程对特定对象进行操作.因此,您需要将指针传递给您希望其操作的对象.如果您在该对象的成员函数内,则this指针指向您正在操作的对象.您不能直接将指针传递给成员函数(因为类型会有所不同),因此您使用静态成员函数,其唯一目的是将this指针强制转换回正确的类型并运行非静态成员函数.

如果将此更改为NULL,则线程将不知道它应该在哪个对象上操作.可能,QThreadPrivate :: start会出错或失败,因为如果没有指向该实例的指针,它将无法在实例上调用非静态成员函数.

假设您有一个具有普通成员函数的类,该函数不带参数并且不返回任何参数.您有一些代码不知道您的类或其任何结构.您希望为该代码提供足够的信息来在特定的类实例上调用该成员函数.你通过什么?你不能传递一个指向成员函数的指针,因为不知道你的类,它不能调用普通的类成员函数.答案:您向它传递一个指向静态成员函数的指针,该函数的实现调用普通成员函数,并向它传递一个指向您希望它调用其方法的实例的指针.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读