Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写C++;具有异步事件触发的COM对象(如VB6和#x27;的计时器对象)? 我正在通过代码> > RerecDirectYySexW编写目录更改通知的C++ COM对象。对象中的线程将等待更改,然后通知VB6客户端_C++_Asynchronous_Timer_Com_Vb6 - Fatal编程技术网

如何编写C++;具有异步事件触发的COM对象(如VB6和#x27;的计时器对象)? 我正在通过代码> > RerecDirectYySexW编写目录更改通知的C++ COM对象。对象中的线程将等待更改,然后通知VB6客户端

如何编写C++;具有异步事件触发的COM对象(如VB6和#x27;的计时器对象)? 我正在通过代码> > RerecDirectYySexW编写目录更改通知的C++ COM对象。对象中的线程将等待更改,然后通知VB6客户端,c++,asynchronous,timer,com,vb6,C++,Asynchronous,Timer,Com,Vb6,我知道如何从程序的主线程触发事件,类似于回调函数,但我不想强制用户每隔一小段时间轮询我的对象进行更改 据我所知,我想要的是通过发送窗口消息来完成的,但这需要VB6端的表单子类化,这相当复杂 因此,我正在寻找一种方法来编写像VB6的Timer这样的对象,即使VB6当前没有调用Timer的方法,它也可以在VB6中触发事件。这可能吗?COM事件 这个主题相当费劲,它意味着定义一个事件使用者(VB)传递给事件源的“sink”接口,然后通过调用“sinken”接口上的方法引发事件。看见你必须实施。好消息是

我知道如何从程序的主线程触发事件,类似于回调函数,但我不想强制用户每隔一小段时间轮询我的对象进行更改

据我所知,我想要的是通过发送窗口消息来完成的,但这需要VB6端的表单子类化,这相当复杂

因此,我正在寻找一种方法来编写像VB6的
Timer
这样的对象,即使VB6当前没有调用
Timer
的方法,它也可以在VB6中触发事件。这可能吗?

COM事件

这个主题相当费劲,它意味着定义一个事件使用者(VB)传递给事件源的“sink”接口,然后通过调用“sinken”接口上的方法引发事件。看见你必须实施。好消息是IDE完全了解这个模型,并将在VB设计器中公开您的事件。从VB端,只需双击COM对象“事件”属性面板即可

至于“异步”部分,这属于组件和VB主机应用程序的“线程”模型。在单元线程(默认)中,必须在主单元线程中引发事件,并且可能必须封送线程之间的接口。看


< >从C++服务器到VB6客户端的异步COM事件的详细信息可以在./p>本机中找到。问题不是关于计时器,而是异步地触发事件(COM机制)。但是<代码>定时器< /代码>是怎么做的?我可以执行
Timer1.Interval=1000
Timer1.Enabled=True
,一秒钟后在主线程中调用
Timer1\u Timer()
事件。某些代码必须已将事件发布到主线程的事件队列,但此代码不能在主线程中,因为主线程只是在
DoEvents
循环中(处理其事件队列)。那么这个条目是如何在事件队列中发布的呢?它使用了一条消息WM_TIMER。就像在封送接口指针并引发事件时使用消息一样,COM管道会处理这个问题。这不仅是一件费力的事情,而且制定确切的步骤是非常核心的。幸运的是,只有通过你们两位的输入,我才能找到一篇关于异步COM事件的文章,并添加了相关链接以完成回答。