C++ 在收到已连接tcp套接字的回复之前,如何防止主线程退出?
这是我的背景C++ 在收到已连接tcp套接字的回复之前,如何防止主线程退出?,c++,mfc,main,exit,C++,Mfc,Main,Exit,这是我的背景MyApp通过单击OK或Cancel对话框按钮正常退出MyApp还保持与另一个应用的TCP连接,HerApp。MyApp可以通过单击其中一个按钮正常退出之前,它需要通知HerApp它正在脱机。此建议消息通过使用此派生类定义的套接字发送到HerApp:class TxSocket:public CAsyncSocketTheraps TCP侦听器答复,该答复出现在MyAppssTxSocket::OnReceive上 我的问题是MyApp在TCPOnReceive发生之前结束 我想到了
MyApp
通过单击OK
或Cancel
对话框按钮正常退出MyApp
还保持与另一个应用的TCP连接,HerApp
。MyApp
可以通过单击其中一个按钮正常退出之前,它需要通知HerApp
它正在脱机。此建议消息通过使用此派生类定义的套接字发送到HerApp
:class TxSocket:public CAsyncSocket
Therap
s TCP侦听器答复,该答复出现在MyApps
sTxSocket::OnReceive
上
我的问题是MyApp
在TCPOnReceive
发生之前结束
我想到了几种方法。显然,我不能在套接字交互完成时阻塞主线程,因为它也在主线程上运行。我不能让主线程脱离范围,因为普通的应用程序退出C++意味着所有的资源都被清理掉了,包括在任何其他线程中使用的资源(参见CPopReult:Stimult> main函数):“……自动存储持续时间的对象……”,所以只需启动另一个线程,它具有自动存储,仅仅发送咨询信息并等待收据也是不可能的。静力学也被破坏了,所以没有帮助。因此,这些技术也不能使用:将std::thread
与std::packaged_task
结合使用,使用std::async
或设置和检索std::promise
s和std::future
s,因为get_future
对象的get()
也会阻塞主线程。我可以创建一个中间线程来创建这些标志对象,但同样,它们都会在MyApp
s退出时被过早地销毁。[main()退出时分离的线程会发生什么?]()帖子探讨了分离线程时会发生什么,但我发现答案并不确定,至少对我这个应用程序开发人员来说是这样
我需要帮助找到一个简单而简单的C++解决方法来解决这个同步问题,我预测,一旦我们通过了Web HTML时代,它将是非常普遍的。
编辑1:
为了澄清问题的背景,这里是我的MFC on cancel handler:
void MyAppDlg::OnCancel()
{
myApp->UseTcpioEngineToSendHerAppAdvisoryMsgThatMyAppHasCanceledExpectConfirmationReply(); // fails because connection and io objects get destroyed before completion
CDialog::OnCancel();
} // all automatic static etc storage is destroyed and exit is called
无论如何,你为什么需要等待咨询信息的回复?这是一场火灾,忘记了这类事情。它不像你会检查析构函数是否在C++中运行。有时候,根本没有可以想象的方法来处理失败,这就是其中之一this@seccpurasio似乎是我所采用的CAsyncSocket IO方法的替代方法。无需切换系统,因为当前的tcp io已在我的应用程序中完全实现和测试。@IInspectable向发件人发送回复是我的系统设计的一部分,因此无论消息的值是建议性的还是,加密数据的传输。@IInspectable你的工作w/r/t这个问题不是针对我的io设计。这无关紧要。请尝试就所提出的问题找到一些实质性的说法。无论如何,你为什么需要等待咨询信息的回复?这是一场火灾,忘记了这类事情。它不像你会检查析构函数是否在C++中运行。有时候,根本没有可以想象的方法来处理失败,这就是其中之一this@seccpurasio似乎是我所采用的CAsyncSocket IO方法的替代方法。无需切换系统,因为当前的tcp io已在我的应用程序中完全实现和测试。@IInspectable向发件人发送回复是我的系统设计的一部分,因此无论消息的值是建议性的还是,加密数据的传输。@IInspectable你的工作w/r/t这个问题不是针对我的io设计。这无关紧要。请试着就所提出的问题找到一些实质性的说法。