C-如何将参数传递给HandleRertine



我想传递给我的ctrl信号处理程序一个事件对象,以通知事件的其他线程并相应地行为。

为了处理控制台CTRL信号,我们需要定义HandlerRoutine并将其传递到SetConsoleCtrlHandler函数。但是,从HandlerRoutine的文档页面中,似乎我们可以传递给它的唯一参数是要处理的CTRL信号的类型。

如何将其他参数传递给处理程序?

由于您的处理程序本质上是无状态的,如果您希望一个线程通知所有线程,则需要一个全局变量。一种可能性是使用单个全局来标记收到的事件。

received_events revents;
BOOL handler (DWORD e) {
    set_received_event(&revents, e);
    wait_if_needed_for_threads_to_handle_event(&revents, e);
    return TRUE;
}

然后,所有线程都必须检查此全局,以查看是否发生了一些感兴趣的事情:

extern received_events revents;
while (!done) {
    if (received_an_event(&revents)) {
        e = which_event(&revents);
        /* ... */
        mark_event_as_handled_maybe_exit_thread(&revents, e);
    }
    do_what_I_normally_do();
}

相关内容

  • 没有找到相关文章

最新更新