QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 798|回复: 6

求助多线程问题

[复制链接]
发表于 2004-8-11 10:15:41 | 显示全部楼层 |阅读模式
写了一个类 下面是头文件(部分)在Initialize()中新生成了一个线程,运行RecvUdp()
class CUdpSock{
private:
......
void RecvUdp();
......
public:
......
void Initialize();
......
};

这是在Initialize()函数中的78行
result = pthread_create(&tid_recvudp, NULL, (void *)RecvUdp, NULL);

编译不过去,提示如下
cudpsock.cpp: In member function `void CUdpSock::Initialize()':
cudpsock.cpp:78: cannot resolve overloaded function `RecvUdp' based on
conversion to type `void*'
make: *** [cudpsock.o] Error 1

我不用类时,用局部函数+main()函数可以编译过去
这是怎么回事

先谢了
发表于 2004-8-11 10:21:56 | 显示全部楼层
对线程来说RecvUdp 必须是全局函数,不能放在类中
可以修改:
void RecvUdp();
class CUdpSock{
private:
......

......
public:
......
void Initialize();
......
};
回复

使用道具 举报

发表于 2004-8-11 10:23:14 | 显示全部楼层
对线程来说RecvUdp 必须是全局函数,不能放在类中
可以修改:
void RecvUdp();
class CUdpSock{
private:
......

......
public:
......
void Initialize();
......
};
回复

使用道具 举报

发表于 2004-8-11 13:24:29 | 显示全部楼层
建议,不要在C++中使用线程,除非有好的线程库。比如ZThreads。
回复

使用道具 举报

发表于 2004-8-11 15:05:12 | 显示全部楼层
我以前也遇到过这样的问题……
感觉特郁闷~如果能给成员函数分配线程就好了~
实在不行……就……用函数“封装”一下吧……
[code:1]
void CUdpSock_RecvUdp(CUdpSock *obj, void* data)
{
    obj->RecvUdp();//当然这样的话RecvUdp()就得是public的
}
[/code:1]
然后创建线程的时候让新线程去执行这个CUdpSock_RecvUdp()……
回复

使用道具 举报

 楼主| 发表于 2004-8-11 15:24:36 | 显示全部楼层
谢谢大家
回复

使用道具 举报

发表于 2004-8-11 21:05:07 | 显示全部楼层
只能是全局函数,用在类里就要声明成静态成员函数。

理由嘛...好像一个是符号解析的问题,还有一个因素,对象的生存期和线程的是分开的,所以不能用对象成员。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:05 , Processed in 0.044676 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表