这个线程有错误么

xijia_130 2006-11-23 11:47:45
用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呢 ?我释放的资源有什么问题呢 ?
...全文
77 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xijia_130 2006-11-23
  • 打赏
  • 举报
回复
找到原因了,超时后要将超时线程TerminateThread

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧