在运行使用IBM Informix4GL和Tibco RV库(libtibrv.so)构建的应用程序时,我遇到了一个困难的情况。Informix4GL不是线程安全的,Tibco总是创建一个线程(我认为它会像我们调用tibrv_Open()一样创建一个线程,但可能是在创建传输之后)
由于4GL处理信号,这会导致应用程序崩溃(当进程运行Tibco线程时,会运行4GL信号处理程序)。
使用调试器时,我注意到这个trhead似乎在循环中……它调用select(),超时时间为10s。
我的问题是:-有没有办法避免创建线程?(我想没有)--有没有办法配置我上面提到的超时时间?-如果有人能给我解释一下这个线程的目的,我将不胜感激。我假设我们将不得不接受它,但如果能理解它为什么会在那里,那就太好了。也许它的存在是为了检查服务器超时?
附注:该应用程序使用C语言与Tibco进行接口。我不认为这是非常相关的,但目前的情况是在Tru64上,我相信Tibco rendezvous是6.9。该环境使用pthread库。这些都是非常老的版本。但客户正在转向更新的版本。
非常感谢您在此发表任何意见。
发布于 2013-07-07 09:55:08
我没见过Tibco,所以我不确定我能帮上忙,但是...
我建议创建一个单独的进程来运行Tibco代码,让I4GL调用当前用于与Tibco库对话的同一个C接口,但是销毁实现,以便这些函数通过管道或套接字将消息发送到Tibco进程(这将由初始化函数启动)。
https://stackoverflow.com/questions/17403052
复制相似问题