代码如下:
int code = pthread_create(&d->thread_id, &attr, QThreadPrivate::start, this);
which QThreadPrivate::start
是一个静态函数。
那么,第四个参数有什么用呢this
?如果有什么区别this
被替换为NULL
?
这是一个常见的习语。您想要启动一个线程,但希望该线程对特定对象进行操作。因此,您需要向线程传递一个指向您希望其操作的对象的指针。如果您位于该对象的成员函数中,则this
指针指向您正在操作的对象。您不能直接传递指向成员函数的指针(因为类型会不同),因此您使用静态成员函数,其唯一目的是强制转换this
返回正确类型的指针并运行非静态成员函数。
如果你改变了this
to NULL
,线程不知道它应该操作哪个对象。很可能,QThreadPrivate::start
会出错或失败,因为如果没有指向该实例的指针,它将无法调用该实例上的非静态成员函数。
假设您有一个类,它有一个普通成员函数,不带参数也不返回任何参数。您有一些代码不了解您的类或其任何结构。您希望为该代码提供足够的信息来调用特定类实例上的成员函数。你通过它做什么?您不能向它传递指向成员函数的指针,因为不了解您的类,它无法调用普通的类成员函数。答案:您向它传递一个指向静态成员函数的指针,该静态成员函数的实现调用普通成员函数,然后向它传递一个指向您希望其调用其方法的实例的指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)