QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1069|回复: 8

关于线程的错误

[复制链接]
发表于 2005-6-13 10:37:14 | 显示全部楼层 |阅读模式
[code:1]void* start_thread(void*);
while(1)
        {
                if((confd=accept(sockfd,(struct sockaddr*)&cliaddr,&len))==-1)
                {
                        cerr<<"Accept is Error !!!"<<endl;
                        exit (0);
                }
                arg=new struct ARG;
                arg->socket=confd;
                memcpy((void*)&arg->cliaddr,&cliaddr,sizeof(cliaddr));
                pthread_create(&thread,NULL,start_thread,(void*)arg);
               
        }
void* start_thread(void* arg)
{
}[/code:1]
这是程序的一部分。是server接受client请求生成一个线程。
但我运行的时候段错误。
发表于 2005-6-13 10:50:48 | 显示全部楼层
memcpy参数反了?
回复

使用道具 举报

 楼主| 发表于 2005-6-13 11:07:11 | 显示全部楼层
好象不是memcpy的错误啊。
如果我把pthread_create()给屏蔽了,就不出现段错误啊。
多谢回贴!!!
回复

使用道具 举报

发表于 2005-6-13 16:55:31 | 显示全部楼层
编译的时候加上 -lpthread
回复

使用道具 举报

发表于 2005-6-13 17:48:21 | 显示全部楼层
[quote:9e53f77aa5="Moonwell"]编译的时候加上 -lpthread[/quote]已经编译成功了的。
对于楼主的问题,既然认为是start_thread的问题,为何不贴出里面的函数呢?
回复

使用道具 举报

 楼主| 发表于 2005-6-13 18:51:07 | 显示全部楼层
哦,谢谢大家的回贴,问题解决了啊。
我在pthread_create()下面加上了。
pthread_join()就ok了啊。
回复

使用道具 举报

发表于 2005-6-14 08:56:47 | 显示全部楼层
join之后 你每次都在等待子线程完成 这和单线程没区别了
回复

使用道具 举报

发表于 2005-6-15 17:04:14 | 显示全部楼层
[quote:0843c0c23b="笑"][quote:0843c0c23b="Moonwell"]编译的时候加上 -lpthread[/quote]已经编译成功了的。
对于楼主的问题,既然认为是start_thread的问题,为何不贴出里面的函数呢?[/quote]

在FC1下遇到过编译时候不加 -lpthread可以成功编译的情况,运行时候出现了code dump

按理说不加-lpthread应该会有个link错误
回复

使用道具 举报

发表于 2005-6-15 17:09:04 | 显示全部楼层
楼主的问题可以用gdb调试一下,应该很容易搞定的.
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-5 21:55 , Processed in 0.040815 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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