C++中如何在类中创建一个线程,

qq675927952 2008-11-18 10:47:47
线程中new 的空间,能在主函数里访问吗;
最好给过详细示例代码,先谢了
...全文
1326 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbing0203 2008-11-18
  • 打赏
  • 举报
回复
访问肯定可以的 只要主函数知道分配的地址
就呆在云上 2008-11-18
  • 打赏
  • 举报
回复
如果线程的诞生是由主线程得到的,那么是可以的,因为线程的共享了主函数的空间
如果线程不是主函数也就是主进程创建,那么就不能访问了,因为子进程用的是一个主函数的空间的一个备份
如下:
#include <sys/types.h>/*提供类型pid_t的定义,在PC机上与int类型相同*/ 
#include <unistd.h>/*提供系统调用的定义*/

void* thread(void* str)
{
str = new char[100];
}
main()
{
pid_t pid;
char *str;
/*此时仅有一个进程*/
printf("PID before fork():%d\n",(int)getpid());
//创建一个线程
ret=pthread_create(&id,NULL,(void *) thread,str); //创建线程传入str作为分配空间用
 if(ret!=0){
  printf ("Create pthread error!n");
  exit (1);
 }
pid=fork();
/*此时已经有两个进程在同时运行*/
if(pid <0)
printf("error in fork!");
else if(pid==0) {
//这里是子进程就是一个新的地址空间,复制了主进程的地址空间,可以但是不是
//之前的主线程的了
printf("I am the child process, my process ID is d%\n",getpid());
delete[] str;
}
else {
waitpid();
delete[] str; //如果子进程的str跟主函数共享,那么这里是会运行时错误的
printf("I am the parent process, my process ID is d%\n",getpid());

}
}
hhyttppd 2008-11-18
  • 打赏
  • 举报
回复
up之
P_ghost 2008-11-18
  • 打赏
  • 举报
回复
问的问题完全和题目无关!
WingForce 2008-11-18
  • 打赏
  • 举报
回复
windows的进程是线程的容器,进程中的所有线程可以共享进程的地址空间,所以完全可以访问,只需要让主函数(主线程)知道就行了,最简单的办法就是用全局变量


char* g_pAddr = 0;

void treadfunc(void* para)
{
g_pAddr = new char[100];
// do other things
}

int main()
{
_beginthread(treadfunc, 0, NULL); // 启动线程
sleep(1000);
//access char[100] through g_pAddr
delete [] g_pAddr;
return 0;
}
zhanshen2891 2008-11-18
  • 打赏
  • 举报
回复
测试一下
踏岸寻柳 2008-11-18
  • 打赏
  • 举报
回复
没问题啊,为类声明一个静态的void方法,然后就像普通的线程函数一样使用
可以放在类外部调用该线程,也可以在类的某些方法(如构造函数)中调用。
xxgamexx 2008-11-18
  • 打赏
  • 举报
回复
mark!!


多线程公用进程资源 多进程拷贝进程资源

64,632

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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