CSocket & CWinThread
От: Exel1  
Дата: 06.03.05 17:14
Оценка:
Имеется диалоговое MFC приложение (с использованием винсокетов, т.е. AfxSocketInit() вызван).
Класс диалога — CEagent2Dlg
в нём есть мемберы:
CSocket sockSrvr;
CSocket sockRecv;
CAgentThread thread;

и на OnInitDialog() делается следующее:
sockSrvr.Create(373);
sockSrvr.Listen();
thread.CreateThread();

класс CAgentThread сделан из CWinThread причём переопределена OnIdle():

BOOL CAgentThread::OnIdle(LONG lCount)
{
// TODO: Add your specialized code here and/or call the base class
CEagent2Dlg *dlg=(CEagent2Dlg *)((::theApp).m_pMainWnd);

dlg->sockSrvr.Accept(dlg->sockRecv);


return 1;
}


на вызове Accept всё это дело рушится с треском и выдаёт Debug Assertion Failed вот в этом куске кода:

BOOL CSocket::PumpMessages(UINT uStopFlag)
{
// The same socket better not be blocking in more than one place.
ASSERT(m_pbBlocking == NULL);

_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;

ASSERT(pState->m_hSocketWindow != NULL); //<< ТУТ!!!!!

BOOL bBlocking = TRUE;
m_pbBlocking = &bBlocking;
CWinThread* pThread = AfxGetThread();




чё делать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.