Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在收到已连接tcp套接字的回复之前,如何防止主线程退出?_C++_Mfc_Main_Exit - Fatal编程技术网

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
s
TxSocket::OnReceive

我的问题是
MyApp
在TCP
OnReceive
发生之前结束

我想到了几种方法。显然,我不能在套接字交互完成时阻塞主线程,因为它也在主线程上运行。我不能让主线程脱离范围,因为普通的应用程序退出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设计。这无关紧要。请试着就所提出的问题找到一些实质性的说法。