请教一个线程的简单问题

bubududu 2004-11-22 03:58:02
主线程A
数据库操作线程B 进行数据库操作,返回结果,结果为int型,假定为

A开了多个B线程
B使用postthreadmessage向A传送结果
是不是直接B直接这样写就可以了
int TB(DWORD parent_thread_id){
int iRtn;
iRtn=0;
// ............
postthreadmessage(parent_thread_id,WM_UserDefined,0,(LPARAM)&iRtn);
return iRtn;
}
先不管人家是否建立了消息队列,能不能接受到,就发送方来说,这样写对不对?

我很怀疑1、iRtn是局部变量,会不会不对?
2、有多个B线程,会不会冲突?
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-11-22
  • 打赏
  • 举报
回复
保证传递后,你的数据对象在生命周期内
beyondtkl 2004-11-22
  • 打赏
  • 举报
回复
有多个也没事呀 反正线程的handle唯一..

如楼上的传值应该没问题 但是如果是一个比较大的自定义数据结构对象呢??
可能 需要传全局的地址空间
DentistryDoctor 2004-11-22
  • 打赏
  • 举报
回复
postthreadmessage(parent_thread_id,WM_UserDefined,0,(LPARAM)&iRtn);
=>
postthreadmessage(parent_thread_id,WM_UserDefined,0,(LPARAM)iRtn);
就不会有问题了。
此线程应该是UI线程。
lsgt 2004-11-22
  • 打赏
  • 举报
回复
A没有消息队列,你还能post成功?奇怪了。

不过可以一直post到A已经建立消息队列为止。

try876 2004-11-22
  • 打赏
  • 举报
回复
先不管人家是否建立了消息队列,能不能接受到,就发送方来说,这样写对不对?
------------------------------------
我认为是对的

有多个B线程,会不会冲突?
-----
就你目前的情况看,不会冲突
try876 2004-11-22
  • 打赏
  • 举报
回复
同意 krfstudio() 的说法
  • 打赏
  • 举报
回复
简单一点直接用回调函数就可以了。
krfstudio 2004-11-22
  • 打赏
  • 举报
回复
多个 B 线程之间的冲突是不会有的,不过很可能在接收方开始处理这个消息之前 iRtn 的内存就已经释放掉了。直接发送 iRtn 不要发送指针就好了:

postthreadmessage(parent_thread_id,WM_UserDefined,0,(LPARAM)iRtn);
barsteng 2004-11-22
  • 打赏
  • 举报
回复
A线程中:
int * pReturnArray=new int[iThreadNum];
for(int i=0;i<iThreadNum;i++)
{
_beginthreadex(NULL,0,ThreadFunc,pReturnArray+i,0,&m_dwThreadID);
}
barsteng 2004-11-22
  • 打赏
  • 举报
回复
简单的返回数据方式,是你将需要B线程返回的值用一个指针传递到B线程,然后就可以了
bubududu 2004-11-22
  • 打赏
  • 举报
回复
好像会内存越界的。。
有什么办法返回数据呢?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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