读书人

求类成员函数作为线程函数的完美解决办

发布时间: 2013-07-08 14:13:00 作者: rapoo

求类成员函数作为线程函数的完美解决方法
有一个类需要不挺的监控一个端口。我想把监控封装到类中。可是类的成员函数是不能直接作为线程函数。因为类成员函数有个隐含的this指针参数。

采用曲线救国的方法,可是好像都失去了封装性。
我能想到的和能在网上搜到的:

(1)用类的静态成员作为线程函数,并用一个成员函数开启线程
缺点,不能访问类的非static成员,虽说可以通过将this指针作为参数传给线程函数,再强制转换为类类型指针。可是静态成员不是对象的一部分,封装和抽象性。

(2)将线程函数定义为类的友元函数。这样友元函数就可以访问类的成员了。
缺点:友元函数不是类的成员,失去了封装性

(3)用一个普通的全局函数作为线程函数,传递类的指针给该函数。再在该线程函数中调用类公开的成员函数。

(4)用一个普通的全局函数作为线程函数,传递类的指针(地址),和成员函数的指针(地址)给该线程函数,这样可以避开类成员函数的访问权限问题。


有什么好的实现方法吗?java里好像有类的成员函数是runable的。java是怎么实现的呢? 多线程 类
[解决办法]
封装线程可以做到的啊。
我自己用线程向来都是用封装好的类。
用1个静态的成员函数作为beginthreadex的回调函数
然后再用1个真正的线程函数,让静态的那个去调用。
做1个基类。
每次做线程的时候继承一下,只要把真正的线程函数写一遍就行了。
[解决办法]
boost::thread + boost::bind

支持C++ 11的话,就用std::thread + std::bind
[解决办法]
1 . thunk
atl 中有个 _stdcallthunk。
2 std::thread 稍微新一些的编译器都支持了。

读书人网 >C++

热点推荐