一个蛋疼的问题,我是新手

xuexi1028 2012-05-23 06:02:37
作为一个LINUX 新手求解一问题,我用main函数创建了2个线程,在线程里面打印信息,
打印不出来,但是用gdb step走,能打印出来,求解,程序是没问题,的,我做了3年 win32,求达人说下,LINUX 实在太菜了
...全文
112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexi1028 2012-05-24
  • 打赏
  • 举报
回复
揭帖,给分,确实要等待线程的结束 ,我2B了
xuexi1028 2012-05-24
  • 打赏
  • 举报
回复
LS 正解。给分 揭帖
justkk 2012-05-24
  • 打赏
  • 举报
回复
main 函数结束的太快了,导致整个进程终止了
你可以用pthread_join 等待线程先结束

或者简单的在main()函数退出前,sleep(3),看看效果
xuexi1028 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
作为一个LINUX 新手求解一问题,我用main函数创建了2个线程,在线程里面打印信息,
打印不出来,但是用gdb step走,能打印出来,求解,程序是没问题,的,我做了3年 win32,求达人说下,LINUX 实在太菜了
[/Quote]
其实代码很简单,
#include<iostream>
using namespace std;
#include<pthread.h>
typedef struct Mydata
{
int data1;
int data2;
Mydata(int x,int y)
{
data1= x;
data2= y;
}
}MYDATA;
void showvalue(int res)
{
std::cout<<"the value is:"<<res<<"\r\n";
}
void* add_thread(void* parm)
{
MYDATA* data= (MYDATA*)parm;
int total = data->data1 + data->data2;
//std::cout<<"the value is:"<<total<<"\r\n";
showvalue(total);
return 0;
}
void* sub_thread(void* parm)
{
MYDATA* data= (MYDATA*)parm;
int subres = data->data1 - data->data2;
//std::cout<<"the sub is:"<<subres<<"\r\n";
showvalue(subres);
return 0;
}
void* tempthread(void*)
{
printf("thread temp");
return 0;
}
int main()
{
pthread_t addID;
pthread_t subID;
MYDATA data_1(22,11);
MYDATA data_2(33,11);
printf("enter main\r\n");
//if(!pthread_create(&addID,NULL,add_thread,(void*)&data_1))
//{
// //printf("add failed\r\n");
//}
pthread_create(&addID,NULL,tempthread,NULL);
if(!pthread_create(&subID,NULL,sub_thread,(void*)&data_2))
{
printf("success");
}
else
{
printf("error");
}
printf("leave the main\r\n");
return 0;
}
邹亚鹏 2012-05-23
  • 打赏
  • 举报
回复
没代码怎么看?!
qq120848369 2012-05-23
  • 打赏
  • 举报
回复
... 3年windows理应没压力的...

贴代码吧.

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧