请教多线程间通讯的方法,MSDN里的话我不是很清楚如何实现,现贴于此?急待高手解答!!!

wkoji 2003-01-02 10:33:32
我在MSDN上找到如下“Windows 句柄映射
作为通用规则,线程只能访问它创建的 MFC 对象。这是因为临时和永久性 Windows 句柄映射保留在线程本地存储中,以对它进行保护,确保不能有多个线程同时访问它。例如,辅助线程不能执行计算并调用文档的 UpdateAllViews 成员函数来修改包含新数据视图的窗口。此操作将不会有任何效果,因为从 CWnd 对象到 HWND 的映射是主线程的本地映射。这意味着一个线程可能有从 Windows 句柄到 C++ 对象的映射,但是另一个线程可能会将此句柄映射到其他 C++ 对象。在一个线程内所做的更改将不会反映在另一个线程中。
有几种方式可以避免此问题。首先是将各个句柄(如 HWND)而不是 C++ 对象传递到辅助线程。然后,辅助线程通过调用适当 FromHandle 成员函数将这些对象添加到它的临时映射。还可以通过调用 Attach 将对象添加到线程的永久映射,但只有在保证对象比线程存在的时间长时,才应当进行此操作。”

希望有大侠能给我解释一下,最好有源代码。
我的函数调用如下
AfxBeginThread(WorkerThread,pClient_Socket_FileName);
pClient_Socket_FileName是一个结构指针,我希望通过在pClient_Socket_FileName
改变标志变量的方式来控制各个线程之间的运行情况,以及和主线程通讯.
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
icelight 2003-01-07
  • 打赏
  • 举报
回复
线程间共享MFC对象很容易会出问题。《VC6宝典》里说得很详细。

如果只是线程间改变pClient_Socket_FileName里的一个标志变量的话,不需要知道与句柄有关的内容啊。
wkoji 2003-01-07
  • 打赏
  • 举报
回复
我也奇怪,但是确实得到的只是拷贝。我是试着用全局变量传就可以使用了。
真是让我很疑惑。
ggyy 2003-01-05
  • 打赏
  • 举报
回复
在创建子线程的时候可以将主线程的对象的句斌传递过啊!
你传递时时指针怎么会是访问的拷贝呢?
wkoji 2003-01-04
  • 打赏
  • 举报
回复
我想在子线程中去调用主线程中的一个对象,由于线程的一些保护机制而实际只是调用了该对象的一个拷贝,而无法实际对主线程中的对象产生影响。我现在设立全局变量来调用是可以达到这个效果,但是我想知道除了使用全局变量来传递之外,是否还有其他方法可以让我在子线程中访问到主线程的实际对象。
我不是大明 2003-01-03
  • 打赏
  • 举报
回复
PostThreadMessage();
microyzy 2003-01-03
  • 打赏
  • 举报
回复
可以使用操作系统级别的东西,如内核对象,互斥,信号灯,事件等
wkoji 2003-01-03
  • 打赏
  • 举报
回复
我在MSDN上看到Attach的用法是如何的呢?
难道除了设置全局变量外就没有办法了吗?
qexl 2003-01-03
  • 打赏
  • 举报
回复
请参考<WIN32多线程程序设计>一书
这些东西讲得很多,我不知道你具体有什么问题
liugy 2003-01-03
  • 打赏
  • 举报
回复
和主线程通讯 一般用全局变量
pClient_Socket_FileName改变标志变量可以的
例如:
struct aaa{
bool bStart;
...
bool bEnd;
};

if (bStart)
等待 bEnd==true;
....
In355Hz 2003-01-03
  • 打赏
  • 举报
回复
你摘抄至 MSDN 的那一段话是关于 MFC 的句柄映射的,如果你的线程不使用任何外部创建的 CWnd / CGdiObject 派生对象,可以不管这段描述。

关于这段话的内容,你可以参考 MFC 代码里的以下几个类:CHandleMap(以及 CMapPtrToPtr), _AFX_THREAD_STATE(以及 CThreadLocal), 和 CWnd::FromHandle, CGdiObject::FromHandle 两个函数。

你的情况可以通过 Event 实现,在 pClient_Socket_FileName 结构中传送一个的 hEvent 句柄(参考 CreateEvent), 并且在多个线程间共用同一个 hEvent 对象, 然后通过 WaitForSingleObject / SetEvent 控制各个线程之间的运行同步。
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent

15,466

社区成员

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

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