VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 387|回复: 9

[求助] 多线程 传入参数问题

[复制链接]
51_avatar_middle
在线会员 954624 发表于 2018-2-25 09:24:42 | 显示全部楼层 |阅读模式
3驿站币

  1. // for循环里 开启多线程
  2. CUser*  user2  = new CUser();

  3. user2 = user1;//这样传入线程后  线程内部delete后 其他线程中也被delete

  4. user2.name =user1.name;//这样传入线程后 正常delete,不影响其他线程
  5. user2.id=user1.id;

复制代码


想问下怎么才能快速赋值。因为大部分值是不变的,只需要改其中某个成员的值。





上一篇:结构体memset给BYTE数组内存怎么排列的
下一篇:关于动态创建拆分窗口的问题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

01_avatar_middle
online_admins admin 发表于 2018-2-25 22:53:47 | 显示全部楼层
改其中某个成员的值,那就改变哪个赋值哪个啊
不知道楼主说的快速赋值是什么意思?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| 954624 发表于 2018-2-26 12:50:56 | 显示全部楼层
admin 发表于 2018-2-25 22:53
改其中某个成员的值,那就改变哪个赋值哪个啊
不知道楼主说的快速赋值是什么意思?


比如有10个成员  我只改其中1个
怎么才能让user2的值 = user1的值
然后我改其中一个值就行了
user2.10=user1.10;

如果像下面这样的话
CUser*  user2  = new CUser();
user2 = user1;  
user2.10=user1.10;
这样传入多个线程后  一个线程内部delete后  其他线程中也被delete




发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-2-26 13:39:25 | 显示全部楼层
954624 发表于 2018-2-26 12:50
比如有10个成员  我只改其中1个
怎么才能让user2的值 = user1的值
然后我改其中一个值就行了

对每一个线程都要 new 一个对象啊,不要多个线程共享一个对象!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| 954624 发表于 2018-2-26 17:51:48 | 显示全部楼层
Syc 发表于 2018-2-26 13:39
对每一个线程都要 new 一个对象啊,不要多个线程共享一个对象!
  1. for(int i = 0; i<10;i++){
  2. CUser*  user2  = new CUser();
  3. user2 = user1;  
  4. user2.10=user1.10;
  5. //开始线程传入user2
  6. }

复制代码

开始是这样传的 发现 其中一个线程DELET了  其他线程的 也被DELET了

改成下面 挨个的赋值才行的


  1. for(int i = 0; i<10;i++){
  2. CUser*  user2  = new CUser();
  3. user2.1 = user1.1;
  4. ........
  5. .........  
  6. user2.10=user1.10;

  7. }
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-2-26 17:58:43 | 显示全部楼层
954624 发表于 2018-2-26 17:51
开始是这样传的 发现 其中一个线程DELET了  其他线程的 也被DELET了

改成下面 挨个的赋值才行的

你这句话:user2 = user1; 就是典型的内存泄漏,user2 指针刚用new申请了一个 CUser 对象。比如user2 指向了 0x11111111 这个地址,这个地址以后是要被释放的,之后你就让 user2 指向了 user1,所以,user2 之前的地址就丢了。所以最终的结果还是 所有 new 出来的对象都指向了 user1。所以也就是一个地址,一个线程释放,会导致别的线程用不了了。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| 954624 发表于 2018-2-26 18:27:26 | 显示全部楼层
Syc 发表于 2018-2-26 17:58
你这句话:user2 = user1; 就是典型的内存泄漏,user2 指针刚用new申请了一个 CUser 对象。比如user2 指 ...

恩 后来发现地址是一样的。
那应该怎么做才能让他不是同一个地址,只能一个个的赋值吗

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-2-26 18:35:08 | 显示全部楼层
给 CUser 类中增加一个 copy 的函数,作用就是拷贝对象,例如可以这样:
CUser*  user2  = new CUser();
user2->copy(user1);
这样就把 user1 的内容拷贝到了 user2 上。


或者实现一个拷贝构造函数,之后这样用:
CUser*  user2  = new CUser(*user1);
这样也可以把 user1的数据拷贝给 user2

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| 954624 发表于 2018-2-26 19:00:54 | 显示全部楼层
Syc 发表于 2018-2-26 18:35
给 CUser 类中增加一个 copy 的函数,作用就是拷贝对象,例如可以这样:
CUser*  user2  = new CUser();
...

好的。谢谢。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-9-26 21:30

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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