首先确实我没明白你们所说的起1000个线程的用意。现在明白还不晚。
告诉大家一个不幸的消息。我按照你们的方法测试结果是,联接还是100%的成功。
以下是我的测试代码。
void CClientDlg::OnButton7() //启动1000个线程。
{
for(int i=0;i<1000;i++)
{
AfxBeginThread(threadpool,this);
}
// TODO: Add your control notification handler code here
}
UINT CClientDlg::threadpool(LPVOID lparam)//线程函授
{
CClientDlg * pDlg = (CClientDlg*)lparam;
pDlg->Test();
return 0;
}
void CClientDlg::Test()//执行体
{
WaitForSingleObject(m_event,INFINITE);//1000个线程等在这里
CSocket * pSocket = new CSocket();
pSocket->Create();
if(!pSocket->Connect("10.22.13.193",3333))
{
m_Socket.Close();
return;
}
char test[256];
memset(test,2,256);
m_Socket.Send(test,strlen(test));
m_cs.Lock();
m_testsocket.AddTail(pSocket);
m_cs.Unlock();
}
void CClientDlg::OnButton8() //1000个线程得到信号
{
m_event.SetEvent();//手动的信号量
}
测试的时候,首先启动1000个线程。然后按buttom8.就执行test();
test中,和以前的测试方法一样,发送256字节.server收到后,马上回传256字节。
当我换成2000线程的时候,我的机器在点button8时,报mfc42.dll的错,我想估计是mfc的线程类有问题。但是用1000个线程测试的时候是正常的。连续测试10组,每次1000个线程没丢一个联接。