在单线程中,一下代码没有问题,但是在多线程中却会出现内存非法操作的问题,请高手讲解一下。
CSocket *pSocket=new CSocket; pSocket->Create(27,SOCK_STREAM);
pSocket->Listen(); CSocket socket; pSocket->Accept(socket); CSocketFile *pFile=new CSocketFile(&socket);
CArchive *pArchiveIn = new CArchive(pFile, CArchive::load);
CString rMsg;
pArchiveIn->ReadString(rMsg);在多线程中修改为:
入口:
ThreadParams* pThreadParams=new ThreadParams;
pThreadParams->pSocket=new CSocket;
pThreadParams->pSocket->Create(nPort,SOCK_STREAM);
pThreadParams->socket=new CSocket;
多线程:
int CSocketThread::ListenSocket(ThreadParams* pThreadParams)
{
CSocket *pSocket=pThreadParams->pSocket; CSocket *pSocket=new CSocket;
pSocket->Create(27,SOCK_STREAM); pSocket->Listen(); CSocket *socket=pThreadParams->socket; pSocket->Accept(*socket);
CSocketFile *pFile=new CSocketFile(socket);
CArchive *pArchiveIn = new CArchive(pFile,CArchive::load);
CString rMsg;
pArchiveIn->ReadString(rMsg); delete pArchiveIn;
delete pFile;
return NULL;
}
出错的代码在
pSocket->Accept(*socket)这行,改为AfxBeginThread的Worker MultiThread模式,也不行。始终不明白为什么。
CSocket *pSocket=new CSocket; pSocket->Create(27,SOCK_STREAM);
pSocket->Listen(); CSocket socket; pSocket->Accept(socket); CSocketFile *pFile=new CSocketFile(&socket);
CArchive *pArchiveIn = new CArchive(pFile, CArchive::load);
CString rMsg;
pArchiveIn->ReadString(rMsg);在多线程中修改为:
入口:
ThreadParams* pThreadParams=new ThreadParams;
pThreadParams->pSocket=new CSocket;
pThreadParams->pSocket->Create(nPort,SOCK_STREAM);
pThreadParams->socket=new CSocket;
多线程:
int CSocketThread::ListenSocket(ThreadParams* pThreadParams)
{
CSocket *pSocket=pThreadParams->pSocket; CSocket *pSocket=new CSocket;
pSocket->Create(27,SOCK_STREAM); pSocket->Listen(); CSocket *socket=pThreadParams->socket; pSocket->Accept(*socket);
CSocketFile *pFile=new CSocketFile(socket);
CArchive *pArchiveIn = new CArchive(pFile,CArchive::load);
CString rMsg;
pArchiveIn->ReadString(rMsg); delete pArchiveIn;
delete pFile;
return NULL;
}
出错的代码在
pSocket->Accept(*socket)这行,改为AfxBeginThread的Worker MultiThread模式,也不行。始终不明白为什么。
http://expert.csdn.net/Expert/topic/1354/1354280.xml?temp=.8180658
在你的工作线程会出问题