用wininet写了个一个支持http下载的客户端,任务线程在下载时候用 SetOption来设置超时的问题,可是没有用,后来才发现这是ms的一个bug。
后来就想在任务线程中把Read();函数部分开一个线程,这样来判断read的超时问题。再没有加超时判断线程时,程序没有任何不良反映,但是加了超时线程后,当判断出超时,任务线程退出,过了10秒左右就会有提示 Runtime Error  abnormal program terminal!怀疑是内存释放的问题
超时线程如下,大家看一下: //nRead = pFile->Read(buffer, BUFFER_SIZE);//这个是读远程文件的函数,在没有超时线程时候用。
任务线程序中添加超时线程的代码:phttpdown->a_nRead = &nRead;
phttpdown->pFile=pFile;
phttpdown->buffer=buffer;
HANDLE _thread = CreateThread(NULL,0,ReadThread,(LPVOID)phttpdown,0,NULL);
if(WaitForSingleObject(_thread,30*1000) == WAIT_TIMEOUT)
{
       delete phttpdown;
       phttpdown=NULL;
       ASSERT(pFile!=NULL);
       pFile->Close();
       delete pFile;
       pFile=NULL;
       return FALSE;
}超时线程:
DWORD WINAPI ReadThread(LPVOID param)
{
httpdown * p = (httpdown *)param;
*(p->a_nRead) = p->pFile->Read(p->buffer,BUFFER_SIZE);
delete p;
p=NULL;
return 1;
}
传递参数的数据结构
typedef struct httpdown
{
unsigned int * a_nRead;
CHttpFile* pFile;
BYTE * buffer;
}httpdown;测试了一下,传递的参数没有错误请大虾看看为什么加了超时线程后会有这个Runtime Error呢 ?我释放的资源有什么问题呢 ?