使用 MFC 套接字在靜態鏈接 MFC VisualC++6.0 應用程序, 輔助線程中發生處理異常。

原因

<script type="text/javascript">loadTOCNode(1, 'cause');</script>
未處理異常的原因是該 CMapPtrToPtr 指針類型的對象, 指向由 m_pmapSocketHandle, 從不會創建。

解決方案

<script type="text/javascript">loadTOCNode(1, 'resolution');</script>
套接字由句柄映射需要爲每個線程創建。 以下代碼顯示一個函數來執行此:
   void SocketThreadInit()
   {
   #ifndef _AFXDLL
   #define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
   #define _afxSockThreadState AfxGetModuleThreadState()

      _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
      if (pState->m_pmapSocketHandle == NULL)
         pState->m_pmapSocketHandle = new CMapPtrToPtr;
      if (pState->m_pmapDeadSockets == NULL)
         pState->m_pmapDeadSockets = new CMapPtrToPtr;
      if (pState->m_plistSocketNotifications == NULL)
         pState->m_plistSocketNotifications = new CPtrList;

   #endif
   }
				
每個輔助線程中創建新線程中的第一套接字之前應將調用該函數次。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章