线程函数可以是类成员函数吗?
时间:2010-08-15
来源:互联网
“问题的答案是肯定的:线程函数可以是类的成员函数。但是,必须定义为类的static成员函数。”
但是我在看一项目代码时候,它的线程函数就是类的普通成员函数:
int AAA::foo(ThreadInfo *thread)
它是在Channel对象的另一个函数里作为线程函数产生线程的:
void AAA::startfoo(){
thread.data = this;
thread.func = foo;
if (!sys->startThread(&thread))
reset();
}
可见,其中参数Threadinfo中有个指针指向该AAA对象。
我的问题:
1.这是否就说明线程函数可以是类的非静态成员函数?
2.既然是非静态的,为什么不能直接在stream函数里调用类里的成员呢,而是要通过参数引用。 如果这个Channel是全局对象,就可以直接引用了吧,我记得线程是共享这些的
谢谢谢谢,实在没测试环境,加上好久没编程了,概念混淆还望学长指点下:)
作者: lknh17 发布时间: 2010-08-15
作者: hellioncu 发布时间: 2010-08-16
作者: sophic 发布时间: 2010-08-16
因此线程的启动函数可以是类的静态函数。
作者: zzyong08 发布时间: 2010-08-16
hellioncu 发表于 2010-08-16 08:16
封装是因为要跨平台。而在linux下的实现就是直接调用pthread了
作者: lknh17 发布时间: 2010-08-16
zzyong08 发表于 2010-08-16 09:00
我的问题是能否访问非静态函数。。
作者: lknh17 发布时间: 2010-08-16
sophic 发表于 2010-08-16 08:19
可是这个程序里确实是非静态的。难道是因为创建线程地方也在该类其他函数里才行的?
作者: lknh17 发布时间: 2010-08-16
lknh17 发表于 2010-08-16 10:26
线程入口必须是普通函数或者静态方法,当然封装的时候可以再在普通函数或者静态方法里调用特定对象的非静态成员函数
作者: hellioncu 发布时间: 2010-08-16
不能,因为非静态函数的函数类型都是void* ClassName:: (*)(void *),而不是 void * (*)(void *)。静态函数可以,因为它的函数类型是 void *(*)(void *)
作者: zzyong08 发布时间: 2010-08-16
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28