ATL新手请教

bravery36 2012-11-24 04:17:17
如果我建立了一个STA的com对象,除了使用该对象的函数外没有其他方法能使用该对象的资源(该对象的资源不是共享资源),那么是否该对象的数据操作都可以视为是同步的?

因为我在该对象里面使用了许多int、struct类型的数据,但是在不同线程里都是可以直接使用的,只有js传递进来的回调函数是需要用CoMarshalInterThreadInterfaceInStream锁定和CoGetInterfaceAndReleaseStream来获取的。我不清楚其他数据直接在函数中赋值是否可靠,需不需要自己进行同步处理?

求大侠们不吝指教,因为自己同步比较麻烦,而且可能出错,如果sta有保障就最好了。
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_ask_who 2012-11-24
  • 打赏
  • 举报
回复
问题就在于主线程,因为STA多线程访问需要GetMessage()消息泵驱动,十分的麻烦.
bravery36 2012-11-24
  • 打赏
  • 举报
回复
引用 4 楼 mcmcmc 的回复:
HANDLE一般是全局的,如hFile之类,2个实例可以同时操作它. 你如果只有一个实例则没有问题,但是有些HANDLE是有一个操作流程的,也会出错. 不过STA一般不适合做多线程访问,原因比较复杂,和windows消息传递有关.
了解,多谢指点。其实我这边主要是作为一个com组件不能占用主线程,而且必须要有多个常驻线程,但是只需要让这些线程能互斥访问就足够了。 Handle这类指针处理不当的确会有时序上问题,不过这类问题在非atl的编程里也很常见,所以我也习惯了。主要是用了atl,就希望能合理地利用现有的特性,而不是自己很苦B地加锁控制。
I_ask_who 2012-11-24
  • 打赏
  • 举报
回复
HANDLE一般是全局的,如hFile之类,2个实例可以同时操作它. 你如果只有一个实例则没有问题,但是有些HANDLE是有一个操作流程的,也会出错. 不过STA一般不适合做多线程访问,原因比较复杂,和windows消息传递有关.
bravery36 2012-11-24
  • 打赏
  • 举报
回复
说错了,是有效性。
bravery36 2012-11-24
  • 打赏
  • 举报
回复
引用 1 楼 mcmcmc 的回复:
安全, 如果有多个对象实例,且资源是HANDLE之类的系统变量则不安全.
感谢大侠的回复。对象实例只有一个,HANDLE不安全是因为外部可以修改它的值和有效值吗?
I_ask_who 2012-11-24
  • 打赏
  • 举报
回复
安全, 如果有多个对象实例,且资源是HANDLE之类的系统变量则不安全.

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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