求助:关于多线程的使用问题。

l357630798 2014-09-17 05:35:05
描述如下:
1.我先编写一个类,这个类会把dll的方法重新封装一遍
2.我在对话框工程内,new一个上面类的全局对象出来
3.在主线程内使用封装后的方法,发现dll内的原始函数可能会造成线程阻塞,这样势必会造成界面卡顿。
4.于是,我考虑新建一个子线程出来,然后在子线程内使用dll内的函数,来解卡屏问题。
这样,问题来了,我发现同样的使用dll内的函数在主线程内使用没有任何问题,但是,放入子线程的回调函数内就出现内存报错了。
还请高手指点下。
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
l357630798 2014-09-18
  • 打赏
  • 举报
回复
没人回复了么?
l357630798 2014-09-17
  • 打赏
  • 举报
回复
引用 5 楼 xihu1364 的回复:
[quote=引用 4 楼 l357630798 的回复:] [quote=引用 2 楼 xihu1364 的回复:] 应该是dll中有初始化吧 比如com初始化等等.... 由于主线程中初始化了所以没问题,子线程就没有初始化..
我是在界面初始化的时候初始化的dll,譬如load all / Get function等...在子线程内没有做,莫非子线程内必须再次load dll???[/quote] 你就把这些初始化工作 放在子线程 不就好了 线程有私有的内存资源,平时遇到典型的问题就是使用ado连接数据库,必须每个线程CoInitialize()一下...[/quote] 其实我主要的问题是为解决函数阻塞导致界面卡屏的问题才引申出来的其他问题,解决的方法应该也很多。只是很想弄明白为什么会这样?不过,还是很感谢你们啊。
版主大哥 2014-09-17
  • 打赏
  • 举报
回复
引用 4 楼 l357630798 的回复:
[quote=引用 2 楼 xihu1364 的回复:] 应该是dll中有初始化吧 比如com初始化等等.... 由于主线程中初始化了所以没问题,子线程就没有初始化..
我是在界面初始化的时候初始化的dll,譬如load all / Get function等...在子线程内没有做,莫非子线程内必须再次load dll???[/quote] 你就把这些初始化工作 放在子线程 不就好了 线程有私有的内存资源,平时遇到典型的问题就是使用ado连接数据库,必须每个线程CoInitialize()一下...
l357630798 2014-09-17
  • 打赏
  • 举报
回复
引用 2 楼 xihu1364 的回复:
应该是dll中有初始化吧 比如com初始化等等.... 由于主线程中初始化了所以没问题,子线程就没有初始化..
我是在界面初始化的时候初始化的dll,譬如load all / Get function等...在子线程内没有做,莫非子线程内必须再次load dll???
l357630798 2014-09-17
  • 打赏
  • 举报
回复
引用 1 楼 SP_daiyq 的回复:
在子线程中打个断点,单步看一下是哪里导致的出错
这部分dll是设备供应商的dll,是不可见的。打断点也只能知道是这条函数内存报错了。。。但是再主线程内函数就不会报错,完全正常。
版主大哥 2014-09-17
  • 打赏
  • 举报
回复
应该是dll中有初始化吧 比如com初始化等等.... 由于主线程中初始化了所以没问题,子线程就没有初始化..
sp_daiyq 2014-09-17
  • 打赏
  • 举报
回复
在子线程中打个断点,单步看一下是哪里导致的出错

15,471

社区成员

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

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