当前位置: 技术问答>linux和unix
线程传值一问!
来源: 互联网 发布时间:2015-07-26
本文导语: int test() { char szSendBuf[1024]; pthread_t pid; memset(szSendBuf, 0, sizeof(szSendBuf)); SCSetMTStr("138", "138", "hello", "1015788", 6, szSendBuf); //附值给szSendBuf pthread_create(&pid, NULL, SCConnect, szSendBuf); //pthread_join(pthread_self(), NULL); } void...
int test()
{
char szSendBuf[1024];
pthread_t pid;
memset(szSendBuf, 0, sizeof(szSendBuf));
SCSetMTStr("138", "138", "hello", "1015788", 6, szSendBuf); //附值给szSendBuf
pthread_create(&pid, NULL, SCConnect, szSendBuf);
//pthread_join(pthread_self(), NULL);
}
void SCConnect(const char *pParam)
{
//pthread_detach(pthread_self());
sgip_get_message_head(&pHead, (char *)pParam);
printf("head:%un", pHead.nCommandId);
....
}
如上面程序,当到SCConnect函数printf处,打印出来的数据并非我想要的,也就是说数据没有传递到SCConnect函数,我在test函数最后加了sleep(1)就没问题,但我目前不想要sleep,怎么解决!
{
char szSendBuf[1024];
pthread_t pid;
memset(szSendBuf, 0, sizeof(szSendBuf));
SCSetMTStr("138", "138", "hello", "1015788", 6, szSendBuf); //附值给szSendBuf
pthread_create(&pid, NULL, SCConnect, szSendBuf);
//pthread_join(pthread_self(), NULL);
}
void SCConnect(const char *pParam)
{
//pthread_detach(pthread_self());
sgip_get_message_head(&pHead, (char *)pParam);
printf("head:%un", pHead.nCommandId);
....
}
如上面程序,当到SCConnect函数printf处,打印出来的数据并非我想要的,也就是说数据没有传递到SCConnect函数,我在test函数最后加了sleep(1)就没问题,但我目前不想要sleep,怎么解决!
|
//pthread_join(pthread_self(), NULL);把这句打开
|
”加了sleep(1)就没问题“说明参数传的没错,错的是进程没有等到线程执行完成就退出了,从而将szSendBuf的内容update了。
|
你用char *是在静态存储区分配了内存,用字符数组是在动态存储区分配的,主线程退出后它分配的动态存储区自然无效了,你传得那个指针就变成了悬挂指针了,当然出错了,但是静态存储区内的数据要等待子线程退出后才会被回收,所以你不会出错!
你要么主线程等待子线程返回,要么子线程detached自己退出,你把两种方法都注释了干嘛?
你要么主线程等待子线程返回,要么子线程detached自己退出,你把两种方法都注释了干嘛?
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。