成员变量在评估之前未正确更新

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时执行下一步。