EvtSubscribe and threading
EvtSubscribe and threading
我正在尝试写一个日志转发给Windows。这个计划很简单——接收一个事件通知,然后通过TCP套接字写入它。这个MSDN示例显示我应该使用EvtSubscribe。但是,我对如何为打开的TCP套接字共享文件描述符感到困惑。是否EvtSubscribe回调块默认情况下,它将线程或…?
提前感谢您的任何提示,在Linux上使用C之后,在Windows上学习c++对我来说有点挑战:)
文档在细节上相当稀疏,但我认为它的工作方式如下:
- 如果你使用订阅回调,那么它将在一个专用线程中被调用。所以,如果你延迟它,它将阻止进一步的回调,但不会阻止程序的其他线程
- 如果你使用SignalEvent,它将在事件到达时获得信号,并且不会自动创建线程。
你可以从调用EvSubscribe()的代码和回调中调用GetCurrentThreadId()来检查它是否真的是另一个线程,并比较它们的值。
我的建议是使用线程选项,因为Windows中的事件处理程序很难正确编程。
关于共享TCP套接字,您可以在线程之间共享套接字,但是您不应该同时从多个线程写入它。也不读。然而,你可以从一个线程读,从另一个线程写。另外,当另一个线程正在阻塞操作时,您可以从一个线程关闭套接字:它将被取消。如果您发现这种限制,您应该创建一个用户线程并使用它发送和/或接收数据,同时使用队列或类似的方式与其他线程通信。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- Fortran and C++ threading
- EvtSubscribe and threading
- Erlang and C/C++ Threading