gpt4 book ai didi

c - CtrlEvents的处理程序如何在多线程环境中工作?

转载 作者:行者123 更新时间:2023-12-03 12:59:24 24 4
gpt4 key购买 nike

在C控制台应用程序中,如果我在主线程中使用SetConsoleCtrlHandler并且我还在运行其他线程,那么在事件发生时,所有线程都将停止并且在新线程中执行处理程序吗?还是有办法让一个线程执行该处理程序,而在另一个线程中忽略该处理程序,就像Unix中的pthread_sigmask一样?

在StackOverflow和互联网上都没有太多有关此主题的信息,因此我希望这对您有用。

最佳答案

以上都不是。

documentation for the handler routine中所述:

When the signal is received, the system creates a new thread in the process to execute the function.



如果您需要特定的线程来响应控制台控制信号,则您有责任编写处理程序例程以使用最适合您的代码的线程间通信方法来联系该线程。

确保处理程序例程是线程安全的也是您的责任,因为在处理信号时,现有线程将继续正常运行。

请注意,控制台控制信号与POSIX信号并非十分相似。一方面,它们通常只影响控制台应用程序(GUI应用程序将不会接收控制台控制信号),而另一方面,它们也没有被设计或打算用作IPC机制。另外,当然,它们永远不会中断现有线程。

Microsoft C运行时确实按照标准要求实现了C信号,但是它们也与POSIX信号不太相似。最值得注意的是,它们仅是进程内的。作为一种特殊情况,如果配置SIGINT处理程序,则将其实现为控制台控制处理程序,但是建议使用 is officially unsupported此功能,建议不要使用它。

关于c - CtrlEvents的处理程序如何在多线程环境中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com