在DLL中使用Ttimer疑问! ( 积分: 100 )

  • 主题发起人 主题发起人 赤脚医生
  • 开始时间 开始时间

赤脚医生

Unregistered / Unconfirmed
GUEST, unregistred user!
我在dll中使用了一个ttimer来定时去收去信息,ttimer由dll声明的一个接口来启动。
我现在碰上的问题是当我在主线程中直接调用DLL接口,ttimer的enable设为true后能够触发ttimer的ontimer事件,而我要是在一个线程中调用DLL接口则不能够触发ttimer的ontimer事件!
请问这是什么原因引起的! 是由于线程中没有消息队列引起的吗?但这里并不是在线程中执行ttimer的ontimer事件??
如何解决问题
 
我在dll中使用了一个ttimer来定时去收去信息,ttimer由dll声明的一个接口来启动。
我现在碰上的问题是当我在主线程中直接调用DLL接口,ttimer的enable设为true后能够触发ttimer的ontimer事件,而我要是在一个线程中调用DLL接口则不能够触发ttimer的ontimer事件!
请问这是什么原因引起的! 是由于线程中没有消息队列引起的吗?但这里并不是在线程中执行ttimer的ontimer事件??
如何解决问题
 
把你相关的代码贴出来看看..看看能不能帮你
 
由于你的线程不是GUI线程, 所以没有消息队列, 解决方法是保证TTimer的建立部分在主线程中调用, 但这样一来必须注意一点, OnTimer事件也是在主线程中触发的
如果使用多线程, 一般不在子线程中使用TTimer的, 而是可以使用Sleep或同步对象之类的东东
 
这和Timer的实现原理有关,简单的说,是通过消息队列来告知Timer组建是否该触发OnTimer事件的时候了。dll没有独立的消息队列,肯定没法完成这个操作。不过,你可以在dll里面创建一个隐藏的窗口,它负责接受消息循环。这样应该可行。
 
后退
顶部