一个线程的小问题

aunkbk 2008-05-07 10:30:16
请问大家:
别人都说在工作线程中不能直接使用窗口指针,而我总是在这样用,却从没出过问题,不知道为什么?
请教大家,如果出问题,会在什么情况下出问题呢?先谢谢啦!

...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gavinzhu 2008-05-07
  • 打赏
  • 举报
回复
说白了 你能 避免并发操作某个对象 就没问题
最简单的 读写串口 用读写两个线程进行做
ouyh12345 2008-05-07
  • 打赏
  • 举报
回复
所有的mfc的指针都是非线程安全的
多线程环境下,用句柄
vcPlayer 2008-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
这样说的人很多,但不是所有人都这样说。只要你清楚什么样的情况会出问题,并且避免发生问题就可以了。
其实不只是窗口指针,所有指针都有可能出问题,关键是看会不会发生多个线程同时访问相同的数据的情况,(所有线程对数据都只读除外)。例如:窗口类中定义了一个变量,创建线程时把窗口类指针传给线程,如果主线程随时有可能更改这个变量,而工作线程也要修改这个变量,假设主线程修改这个变量的中途,工作线程对这个变量做…
[/Quote]

核心在于线程同步,重点在于窗口界面要接受用户很多操作,而这些操作又是不可预期的(不像我们工作线程要干嘛都很清楚),有些操作很可能会导致一些窗口指针的“失效”从而导致程序崩溃……严重情况发生。不过在常规应用下一般不会发生这种情况。
cnzdgs 2008-05-07
  • 打赏
  • 举报
回复
这样说的人很多,但不是所有人都这样说。只要你清楚什么样的情况会出问题,并且避免发生问题就可以了。
其实不只是窗口指针,所有指针都有可能出问题,关键是看会不会发生多个线程同时访问相同的数据的情况,(所有线程对数据都只读除外)。例如:窗口类中定义了一个变量,创建线程时把窗口类指针传给线程,如果主线程随时有可能更改这个变量,而工作线程也要修改这个变量,假设主线程修改这个变量的中途,工作线程对这个变量做了修改,这时就会产生冲突,导致变量的数据不正确。当可能发生这种情况时,应采取线程同步手段,防止多个线程同时访问数据。
对于传递窗口类指针,通常的操作,例如更改控件文字,更改控件状态等,这些都是通过SendMessage最终由窗口所属线程来处理的,所以不会发生冲突。常见的冲突是创建、销毁窗口或控件,更新视图,释放指针等。
danscort2000 2008-05-07
  • 打赏
  • 举报
回复
那说明你没吃透消息传递规则
等你编写大型代码,遇到莫名其妙的挂起问题时
你会明白不用工作线程直接处理界面有多么重要

15,466

社区成员

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

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