szBuffer[nLen]=0;
CString strTemp=szBuffer; //CString虽然滥了些,但用着就是方便,嘿嘿~
pFile->Close(); //数据读出来后把该关闭的东西都关掉
pConnection->Close();
delete pFile;
delete pConnection;
session.Close();
//下面的代码就是用来分析HTML代码来得到你感兴趣的数据了,和投票没什么关系,就不详细解释了
int nPos=strTemp.Find("选项A");
int nTempPos=nPos;
if(nPos==-1)
{
theApp.m_nThreads--;
return 0;
}
nPos=strTemp.Find("table width=100>",nPos)+36;
int nEndPos=strTemp.Find("票",nPos);
m_nOurNum=atoi(strTemp.Mid(nPos,nEndPos-nPos));
nPos=strTemp.Find("1");
nPos=strTemp.Find("table width=100>",nPos)+36;
nEndPos=strTemp.Find("票",nPos);
m_nDiff=atoi(strTemp.Mid(nPos,nEndPos-nPos))-m_nOurNum;
m_nVote++;
}
catch(...)
{
}
theApp.m_nThreads--;
return 0;
}
可以看到,关键代码就那么几行,如果不分析投票结果,比方法1少多了,而且看着也没方法1那么乱。不过这种方法同样存在方法1说的那个Session重复问题。而且据我尝试,新开启线程Session也是重复。所以我估计那个Session Key是根据Process ID决定的(一家之言,欢迎大家讨论)。不过如果你同时启动N个线程,着N个线程都可以成功的把票投进去,而不会说“您已经投过票了”。估计是因为这些信息是同时提交上去的,服务器在处理一条信息时还不知道这个Session其实已经投过票了。