拉Vs推模型
EvtSubscribe Pull Vs Push Model
我正在尝试从windows使用以下api。
EVT_HANDLE WINAPI EvtSubscribe(
__in EVT_HANDLE Session,
__in HANDLE SignalEvent,
__in LPCWSTR ChannelPath,
__in LPCWSTR Query,
__in EVT_HANDLE Bookmark,
__in PVOID context,
__in EVT_SUBSCRIBE_CALLBACK Callback,
__in DWORD Flags
);
此api支持两种订阅模式PULL
和PUSH
有两种订阅模式:拉动模式和推送模式。在推送模型中,您实现订阅回调,并将callback参数设置为您的实现。该服务将调用您的回调,每个事件匹配您的查询条件(或如果发生错误)。
在pull模型中,您创建一个服务发出信号的事件对象。发出信号后,使用订阅句柄调用EvtNext函数来枚举事件。必须对枚举的每个事件调用EvtClose函数。然后重置对象并等待服务再次发出信号。此过程会一直重复,直到您取消订阅为止。
我想知道哪个模型是可伸缩的。以及选择一种型号的优缺点。
回调函数是从另一个线程调用的,所以你可能必须同步,如果你必须同步,它将更容易与拉模型…如果同步,它将更容易关闭订阅与事件,因为你可以等待两个事件,一个来自EvtSubscribe和一个关闭…我浪费了几个小时来理解为什么我对EvtClose的调用与回调模型挂起!
同意Jean Davy的观点
Pull方法将帮助你更容易地处理多线程,因为基本上主线程将能够处理所有事情。其简单。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- QTableView:endMoveRows在模型中重置水平页眉大小
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 旋转模型矩阵时的形状失真
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- 拉Vs推模型
- 双插槽vs单插槽内存模型