VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

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

[求助] 怎么向一个类中的线程传递数据

[复制链接]
09_avatar_middle
online_vip wangxiaohu104 发表于 2018-8-29 19:50:47 | 显示全部楼层 |阅读模式
有这样一个场景,一个Server端要处理很多请求,然后这些请求要访问共同的资源
  1. void DemoClient::handleRequest(IncomingPacket *pRequest)
  2. {
  3.    Json::Value&jsonval = reinterpret_cast<Json::Value&>(*pRequest);
  4.    DWORD dwThreadId = 0;
  5.    HANDLE hThread = CreateThread(NULL,0,threadProc,(void*)this,0,&dwThreadId);

  6.   //**************省略*********//
  7. }

  8. DWORD WINAPI DemoClient::threadProc(LPVOID lpVoid)
  9. {
  10.   DemoClient *pThis = reinterpret_cast<DemoClient*>(lpVoid);
  11.   //**************省略*********//
  12.    
  13. }
复制代码
(其实就是调用同一个dll)示例代码如下
我想问下 怎么把每次收到请求的数据 pRequest传送给线程 threadProc,在创建线程的时候已经传个this指针了,怎么传额外的请求数据给线程?求教




上一篇:C++ Windows服务调用dll遇到的问题
下一篇:窗口跟随显示问题

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

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

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

38_avatar_middle
online_vip 2191265529 发表于 2018-8-29 20:30:53 | 显示全部楼层
DemoClient定义成员IncomingPacket *pRequest;试试

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

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

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

回复 支持 反对

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-8-29 22:54:15 | 显示全部楼层
如果给一个函数传递多个参数怎么办?当然是使用结构体了,这样结构体中可以包含N多个成员,你要传多少都可以了。

当然你这里也可以把 pRequest 定义成 DemoClient 的成员变量,这样创建线程的时候 this 指针中就已经包含了 pRequest 的东西了!

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

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

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

回复 支持 反对

使用道具 举报

09_avatar_middle
ico_lz  楼主| wangxiaohu104 发表于 2018-8-30 08:28:57 | 显示全部楼层
Syc 发表于 2018-8-29 22:54
如果给一个函数传递多个参数怎么办?当然是使用结构体了,这样结构体中可以包含N多个成员,你要传多少都可 ...

我考虑过把pRequest做成一个成员变量,可是如果请求很频繁的话,担心传到线程里面的数据是上次请求的数据,会出现这种情况么?

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

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

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

回复 支持 反对

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-8-30 09:52:48 | 显示全部楼层
wangxiaohu104 发表于 2018-8-30 08:28
我考虑过把pRequest做成一个成员变量,可是如果请求很频繁的话,担心传到线程里面的数据是上次请求的数据 ...

如果多个线程共用一个 pRequest 的话肯定不行,那就做成一个结构体安全点

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

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

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

回复 支持 反对

使用道具 举报

09_avatar_middle
ico_lz  楼主| wangxiaohu104 发表于 2018-8-30 14:01:16 | 显示全部楼层
Syc 发表于 2018-8-30 09:52
如果多个线程共用一个 pRequest 的话肯定不行,那就做成一个结构体安全点

能用伪代码演示下么?或者给个例子我看下

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

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

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

回复 支持 反对

使用道具 举报

26_avatar_middle
在线会员 hendugu 发表于 2018-9-2 21:18:40 | 显示全部楼层
  1. typedef struct _XXXData
  2. {
  3.         DemoClient* pClient;        //需要DemoClient对象的话
  4.         IncomingPacket *pRequest;
  5.         ...
  6. }TXXXData, *PXXXData;

  7. {
  8.         PXXXData pXXXData = new TXXXData;
  9.         pXXXData->pClient = this;
  10.         pXXXData->pRequest = ...;
  11.         HANDLE hThread = CreateThread(NULL,0,threadProc,(void*)pXXXData ,0,&dwThreadId);
  12.         ...
  13. }


  14. DWORD WINAPI threadProc(LPVOID lpVoid)
  15. {
  16.         PXXXData pXXXData = (PXXXData)lpVoid;
  17.         .....
  18.         delete pXXXData;
  19.         return 0;
  20. }
复制代码

评分

参与人数 1威望 +2 热心值 +2 收起 理由
51_avatar_small Syc + 2 + 2 很给力!

查看全部评分

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

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

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

回复 支持 反对

使用道具 举报

09_avatar_middle
ico_lz  楼主| wangxiaohu104 发表于 2018-9-3 11:06:55 | 显示全部楼层

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

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

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

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2018-11-19 22:37

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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