gpt4 book ai didi

c - 当按下主程序中的 CTRL-C 时,线程变量/句柄会发生什么情况?

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:50 25 4
gpt4 key购买 nike

我有一个使用 Websphere MQ 6 在 AIX 6.1 上运行的 C 应用程序。

应用的高层是:

  • 主 C 应用程序生成一个单独的线程,该线程执行循环以从队列中获取消息。
  • 当按下 CTRL-C 时,我有一个关闭钩子(Hook)(通过信号),它优雅地将“线程运行变量”设置为 FALSE 并且线程结束。

问题是每当我按下 CTRL-C 时,我都会得到以下原因代码:

2009 - MQRC_CONNECTION_BROKEN

因此,即使 Websphere MQ 上的 MQGET 当前正在运行,当我按下 CTRL-C 时,“连接句柄”似乎“死了”

我是否需要在线程中将连接句柄声明为 volatile 或静态或其他?

我假设我的线程已全部 100% 关闭。...这个连接断开的问题导致在 MQSeries 上生成可怕的日志...

我已经向 mqseries.net 发布了一个类似的问题,但只是想知道在按下 CTRL-C 并触发我的关闭钩子(Hook)时我是否遗漏了一些基本概念....

任何帮助将不胜感激

林顿

最佳答案

对于 POSIX 线程模型,考虑一下:

对于任何调用 pthread_sigmask() 并阻塞 SIGINT 的线程,该线程将不会收到 CTRC/C。包括主线程在内的任何未阻塞信号的线程都将接收到它。处理信号在父线程和线程或您创建的 LWP 之间是不同的。

所以在主程序中,您调用 sigprocmask() 来设置处理 SIGINT。正如你所描述的。所有其他线程都必须自己通过调用 pthread_sigmask() 来阻止 SIGINT。

关于c - 当按下主程序中的 CTRL-C 时,线程变量/句柄会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8083602/

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