我正在尝试为Windows转发日志。计划很简单 - 接收事件通知,然后通过TCP套接字写入。 This MSDN example表明我应该使用EvtSubscribe。但是,我对如何共享打开的TCP套接字的文件描述符感到困惑。 EvtSubscribe默认情况下会回调阻止,还是会线程或......?
提前感谢您提供任何提示,在Linux上使用C语言之后在Windows上选择C ++对我来说是一个挑战:)
答案 0 :(得分:1)
文档的细节很少,但我认为它的工作原理如下:
您可以通过从调用EvSubscribe()和回调的代码中调用GetCurrentThreadId()来检查它是否是另一个线程,并比较这些值。
我的建议是使用线程选项,因为Windows中的事件处理程序很难正确编程。
关于共享TCP套接字,可以在线程之间共享套接字,但是不应该一次从多个线程写入它。也不读。
但是,您可以从一个线程读取并从另一个线程写入。此外,您可以从一个线程关闭套接字,而另一个线程处于阻塞操作中:它将被取消。
如果发现这种限制,您应该创建一个用户线程并使用它来发送和/或接收数据,同时与队列或类似的其他线程进行通信。