程序报错,跟踪进入了 thrdcore.cpp 文件里,到达第114行出现错误// first -- check for simple worker thread
DWORD nResult = 0;
if (pThread->m_pfnThreadProc != NULL)
{
nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams); //这里报错
ASSERT_VALID(pThread);
}可我不知道这个是什么错误??怎么个修改法?还望大家教导一下
DWORD nResult = 0;
if (pThread->m_pfnThreadProc != NULL)
{
nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams); //这里报错
ASSERT_VALID(pThread);
}可我不知道这个是什么错误??怎么个修改法?还望大家教导一下
{
SOCKET Client=(SOCKET)lParam;
try
{
while(1)
{
Sleep(200);
if(::WaitForSingleObject(g_eventKill,0)==WAIT_OBJECT_0)
return 0L; char buf[MAX_BUFFER];
memset(buf,0,MAX_BUFFER);
if(recv(Client,buf,MAX_BUFFER,0)!=SOCKET_ERROR)
{
CString m_temp;
m_temp.Format("%s",buf);
m_temp.Trim();
if(m_temp!="")
{
if(!Sub(Client,m_temp))
{
closesocket(Client);
break;
}
}
}
else
{
return 0L;
}
}
}
catch(...)
{
CString m_Erro;
m_Erro.Format("%d",GetLastError());
m_LogFile.Open("Log.txt",FALSE);
m_LogFile.AppendString(lHandle,"线程发生错误",TRUE);
m_LogFile.AppendString(lHandle,m_Erro,TRUE);
m_LogFile.Close();
throw;
}
return 0L;
}
这个函数是否声明为 static ?
这句中把你的Client的指针作为参数传递给线程函数然后在线程函数中
UINT CVSDlg::OnRecvThread(LPVOID lParam)
{
SOCKET* pClient=(SOCKET*)lParam;
///然后用到Client的地方用*pClient来代替
。。
}
试一试!希望对你有所帮助!
CATCH块里了
AfxBeginThread((AFX_THREADPROC)CVSDlg::OnRecvThread,(LPVOID)Client,THREAD_PRIORITY_NORMAL,0,0,NULL);
a CWinThread object at $00368418, 68 bytes long
Dumping objects ->
a CWinThread object at $057F7788, 68 bytes long
thrdcore.cpp(311) : {154905} client block at 0x057F7B58, subtype c0, 68 bytes long.
a CWinThread object at $057F7B58, 68 bytes long
thrdcore.cpp(311) : {154654} client block at 0x057F7270, subtype c0, 68 bytes long.
a CWinThread object at $057F7270, 68 bytes long
thrdcore.cpp(311) : {153528} client block at 0x057F6E98, subtype c0, 68 bytes long.
a CWinThread object at $057F6E98, 68 bytes long
thrdcore.cpp(311) : {153474} client block at 0x057F6B50, subtype c0, 68 bytes long.
a CWinThread object at $057F6B50, 68 bytes long
thrdcore.cpp(311) : {153225} client block at 0x057F6490, subtype c0, 68 bytes long.
a CWinThread object at $057F6490, 68 bytes long
thrdcore.cpp(311) : {152025} client block at 0x057F2FD8, subtype c0, 68 bytes long.
thrdcore.cpp(311) : {1113} client block at 0x003669D8, subtype c0, 68 bytes long.
a CWinThread object at $003669D8, 68 bytes long
thrdcore.cpp(311) : {912} client block at 0x003664E0, subtype c0, 68 bytes long.
a CWinThread object at $003664E0, 68 bytes long
thrdcore.cpp(311) : {882} client block at 0x00366198, subtype c0, 68 bytes long.
a CWinThread object at $00366198, 68 bytes long
thrdcore.cpp(311) : {394} client block at 0x00365E50, subtype c0, 68 bytes long.
a CWinThread object at $00365E50, 68 bytes long
thrdcore.cpp(311) : {92} client block at 0x00362928, subtype c0, 68 bytes long.
a CWinThread object at $00362928, 68 bytes long
d:\documents and settings\administrator\桌面\vs\logfile.cpp(67) : {65} normal block at 0x003628E0, 8 bytes long.
Data: < > 00 00 00 00 01 00 00 00
d:\documents and settings\administrator\桌面\vs\logfile.cpp(67) : {51} normal block at 0x003626D0, 8 bytes long.
Data: < > 00 00 00 00 01 00 00 00
d:\documents and settings\administrator\桌面\vs\logfile.cpp(67) : {50} normal block at 0x00362688, 8 bytes long.
Data: < > 00 00 00 00 01 00 00 00
d:\documents and settings\administrator\桌面\vs\logfile.cpp(67) : {49} normal block at 0x00362640, 8 bytes long.
Data: < > 00 00 00 00 01 00 00 00
d:\documents and settings\administrator\桌面\vs\logfile.cpp(67) : {48} normal block at 0x003625F8, 8 bytes long.
Data: < > 00 00 00 00 01 00 00 00
Object dump complete.
程序“[2536] VS.exe: 本机”已退出,返回值为 2 (0x2)。
{
SOCKET conn=(SOCKET)lParam;
while(1)
{
if(::WaitForSingleObject(g_eventKill,0)==WAIT_OBJECT_0)
return 0L;
SOCKET Client;
sockaddr_in sockaddr;
int len=sizeof(sockaddr);
Client=accept(conn,(SOCKADDR*)&sockaddr,&len);
if(Client!=INVALID_SOCKET)
{
AfxBeginThread(OnRecvThread,(LPVOID)Client,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
return 0L;
}这个是我创建线程的代码
里面我的代码包含一个线程管理器,包含等待线程队列/运行线程队列和已结束线程队列的管理