我使用Websphere MQ 6在AIX 6.1上运行了一个C应用程序。
应用程序的高级别是:
问题是每当我按下CTRL-C时,我都会得到以下原因代码:
2009 - MQRC_CONNECTION_BROKEN
所以即使Websphere MQ上的MQGET当前正在运行,当我按下CTRL-C时,“连接句柄”似乎“死”
我是否需要将线程中的连接句柄声明为volatile或static或其他内容?
我认为我的线程关闭都是100%....而且这个连接断开的问题导致在MQSeries上生成可怕的日志......
我已经向mqseries.net发布了一个类似的问题,但我只是想知道当CTRL-C被击中并且我的关闭钩子被触发时我是否缺少一些基本概念....
非常感谢任何帮助
林顿
答案 0 :(得分:1)
使用POSIX线程模型考虑:
对于调用pthread_sigmask()并阻止SIGINT的任何线程,该线程将不会收到CTRC / C.包括主线程在内的任何未阻塞信号的线程都会收到它。在父线程和您创建的线程或LWP之间处理信号是不同的。
因此在主程序中,调用sigprocmask()来设置处理SIGINT。如你所述。 所有其他线程本身都必须通过调用pthread_sigmask()来阻止SIGINT。