如何(优雅地)终止 gSOAP 服务器
How do I (gracefully) terminate a gSOAP server?
我有从WSDL文件+Qt GUI生成的gSOAP服务器。生成的代码工作得很好,除了一个点导致我的进程在 GUI 退出后保持活动状态。(我正在Windows上部署,所以我没有信号(
我需要我的 GUI 保持活动状态(自然(,所以我将服务器代理对象移动到一个基于 QObject
的类,后者被移动到另一个QThread
,然后我通过外部信号启动它。服务器现在在其父 QObject 的事件循环上运行并且工作正常。
唯一的问题是我不知道如何在退出时终止服务器。我尝试调整为服务器生成的代码(顺便说一下,这真的是一个好主意吗?
int MySweetService::run(int port)
{ if (!soap_valid_socket(this->soap->master) && !soap_valid_socket(this->bind(NULL, port, 100)))
return this->soap->error;
for (;;) // =====> Maybe here I can put my while(module_is_running_atomic_bool) ?
{ if (!soap_valid_socket(this->accept()))
{ if (this->soap->errnum == 0) // timeout?
this->soap->error = SOAP_OK;
break;
}
if (this->serve())
break;
this->destroy();
}
return this->soap->error;
}
从另一个线程调用 soap_done(&soap( 会终止对 accept(( 和下一个 "serving" 线程的阻塞调用。它在Windows上对我有用,但我在Linux上不起作用 - 看起来gsoap有一些多任务处理问题。您还需要一些布尔标志来让"服务"线程知道您关闭了它,而不仅仅是 gsope 中的错误。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 使用GSoap实现ONVIF
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- llvm构建器向基本块添加终止符
- 如何使用隔离>终止执行来停止所有线程
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 用于将C++代码转换为 Web 程序集的脚本未终止
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 终止 QProcess 不会终止子进程
- gSoap在从.wsdl创建.h期间出现错误
- 运行代码时,c++ 会终止进程
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 在输入句子时终止 std::out_of_range
- 二进制搜索的终止点
- MPI:检查是否有任何进程已终止
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 如何(优雅地)终止 gSOAP 服务器