类中使用多线程时的注意事项
刚才在写一个小程序,需要在类中添加一个能开启后台线程的函数。
为了能让线程函数参入到类中的数据处理,这个线程函数要么作为类的成员函数,要么设为友元函数。
不过我对友元函数不太感冒,就没采用这种方法。
但是,如果单纯的作为类的成员函数,那么这个又存在一个问题,就是因为成员函数隐含的this指针会导致线程函数不满足AfxBeginThread以及_beingthreadex等函数的参数要求。刚才在这里卡住了。
函数声明都没问题,但是就差在this指针上。
所以只要除去this指针就能实现要求。
我们知道C++中,静态成员函数是不存在this指针的。
接下来就很简单了,函数前面添加一个static就OK了~
但是另外需要注意的是,因为静态成员函数不允许访问类中的非静态成员变量(因为没有this指针),所以在线程函数中,在参数中传入this指针。
有点绕弯了,是吧?
其实this指针就是当前对象的首地址,可以通过类型转换来使用哦。
当然,如果你觉得有点烦,可以使用友元函数的。不过这种方法能保证更好地封装性。