ActiveX控件中使用多线程导致的问题

3 篇文章 0 订阅
2 篇文章 0 订阅

用VC++6.0写MFC ActiveX控件,就是实现个数据统计功能,调用SqlServer的存储过程,计算量比较大,调用时间比较长,所以要把进度显示出来(方法前文有述),用到多线程。需要在线程函数里把计算的结果通过控件事件传出去。

问题很奇怪,本来以为没问题,使用VB调用该控件调试时一切良好,偶有程序无响应情况,还以为是远端数据服务器问题,没有理会,另外使用ActiveX Control Test Container也很正常。但是当用VB生成可执行程序后,总是出现内存错误,删去ActiveX控件线程函数中的事件调用后没有问题了,但是统计结果就传不出来了。

解决:估计是线程函数中调用控件的事件函数不安全,虽然在VC程序和ActiveX Control Test Container中并无问题。于是删掉ActiveX控件线程函数中的事件调用,改用消息传递机制,直接向控件发送消息(统计的结果通过消息的wParam传递出去),然后在控件消息响应函数中调用控件事件。问题解决。

 

PS:还以为类里线程函数中只能使用类的静态方法和变量,原来创建线程时就把this指针传给线程函数了,通过传进来的this指针就可以访问类的所有成员变量和方法了。即使这样,在调用事件时还是出现了上面的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值