成员变量在评估之前未正确更新
Member variable not properly updating before being evaluated
我有一个内置于 mfc 中的简单 TCP 客户端。在我的连接代码中,我为我的 Create()
调用遍历了不同的端口号,以避免 TIME_WAIT
重新连接到服务器时出现问题。
这是我的 TCP 连接对话框的代码,CAsyncSocket
派生 tcpControl
class。
void CTCPSettingsDlg::Connect()
{
CMainFrame* pMainFrame = (CMainFrame *)AfxGetMainWnd();
CLOPCDoc* pDoc = ((CLOPCDoc *)pMainFrame->GetActiveDocument());
int nPort = 5000;
while(nPort<6000)
{
pMainFrame->CloseTCP(); // close TCP port
OpenPort(nPort); // open TCP port to nPort
pDoc->tcpControl.Connect(m_szHostIP,atoi(m_szPort));
nPort++;
if(m_bState == CONNECTED) break;
}
}
如果连接成功,将调用 MFC 的 tcpControl::OnConnect,它会被覆盖以将对话框的 m_bState
成员变量设置为 CONNECTED。
然而,即使连接成功,break
也永远不会执行,因为代码块无法识别对m_bState
的更改。
在 if
语句之前放置一个 AfxMessageBox()
调用会导致代码正确执行。
所有这些代码 运行 在一个线程中。我很困惑为什么成员变量没有及时更新以被 if
语句捕获。
我是网络编程新手;如果我在设置套接字的方式上看起来像是在做任何愚蠢的事情,请随时告诉我。
感谢您的帮助。
m_bState 不会改变,因为你正在执行一个 while 循环。在您发送消息之前,不会调用 OnConnect。 (它是一个消息处理程序。)返回 MFC 将发送消息,或者显示 MessageBox 将发送消息。
摆脱while循环,在调用OnConnect时执行下一步。
我有一个内置于 mfc 中的简单 TCP 客户端。在我的连接代码中,我为我的 Create()
调用遍历了不同的端口号,以避免 TIME_WAIT
重新连接到服务器时出现问题。
这是我的 TCP 连接对话框的代码,CAsyncSocket
派生 tcpControl
class。
void CTCPSettingsDlg::Connect()
{
CMainFrame* pMainFrame = (CMainFrame *)AfxGetMainWnd();
CLOPCDoc* pDoc = ((CLOPCDoc *)pMainFrame->GetActiveDocument());
int nPort = 5000;
while(nPort<6000)
{
pMainFrame->CloseTCP(); // close TCP port
OpenPort(nPort); // open TCP port to nPort
pDoc->tcpControl.Connect(m_szHostIP,atoi(m_szPort));
nPort++;
if(m_bState == CONNECTED) break;
}
}
如果连接成功,将调用 MFC 的 tcpControl::OnConnect,它会被覆盖以将对话框的 m_bState
成员变量设置为 CONNECTED。
然而,即使连接成功,break
也永远不会执行,因为代码块无法识别对m_bState
的更改。
在 if
语句之前放置一个 AfxMessageBox()
调用会导致代码正确执行。
所有这些代码 运行 在一个线程中。我很困惑为什么成员变量没有及时更新以被 if
语句捕获。
我是网络编程新手;如果我在设置套接字的方式上看起来像是在做任何愚蠢的事情,请随时告诉我。
感谢您的帮助。
m_bState 不会改变,因为你正在执行一个 while 循环。在您发送消息之前,不会调用 OnConnect。 (它是一个消息处理程序。)返回 MFC 将发送消息,或者显示 MessageBox 将发送消息。
摆脱while循环,在调用OnConnect时执行下一步。