MFC多线程文件传输的退出

paresly 2014-01-24 03:12:14
最近用MFC做网络文件传输的功能,用的是多线程,在文件传输过程中,可能会退出,我目前是先等待文件传完,在退出,问题是会非常的卡,如果直接退出的话,又会造成内存泄漏,详见下述:

//网络传输信息
typedef struct NetInfo
{
CString m_strSrvIP;
CString m_strFilePath;
UINT m_nPort;
Log *m_pCliLog;
int m_nState;
HWND m_hWnd;

NetInfo()
{
m_strSrvIP = _T("");
m_strFilePath = _T("");
m_nPort = -1;
m_pCliLog = NULL;
m_hWnd = NULL;
m_nPort = -1;
m_nState = 1;
}
}NetInfo;

//监听线程
DWORD WINAPI ReceThread(LPVOID lpparam)
{
NetInfo *ptNetInfo = (NetInfo*)lpparam;
//结构体中含有Cstring,会造成内存泄漏

while(TRUE)
{
if (2 == ptNetInfo->m_nState)
{
break;
}

//处理文件传输的代码
}
}

当退出是,我会在主线程中把ptNetInfo->m_nState的值改为2,然后在WaitforSingleObject()
至到退出,但是文件大的话,就非常卡,如果直接强制关闭线程,又会造成内存泄漏,求大神指点一下,要如何才能既快又无内存泄漏的关闭程序。
...全文
289 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 2014-02-07
  • 打赏
  • 举报
回复
同意3楼,用户在传输文件过程中,点击退出程序,此时主线程把ptNetInfo->m_nState的值改为2,然后就隐藏窗口了。不用等待同步对象,当工作线程做好善后工作后,发送一个消息给主线程,主线程收到后正式结束进程。
paresly 2014-02-07
  • 打赏
  • 举报
回复
引用 3 楼 wumn29 的回复:
做成假退出, 界面隐藏, 声明一个event内核对象, 文件传输完毕置为有信号, 在退出函数里面waitforsingleobject这个event, 后面接上清理内存的代码
传输的过程不在主线程中,不会出现卡的情况,就是在退出等待是会有卡的时候。
wumn29 2014-01-27
  • 打赏
  • 举报
回复
while会卡死主线程的, 按照我在3lou说的, 搞个事件通知就行了, 主线程只需要等待
wumn29 2014-01-27
  • 打赏
  • 举报
回复
做成假退出, 界面隐藏, 声明一个event内核对象, 文件传输完毕置为有信号, 在退出函数里面waitforsingleobject这个event, 后面接上清理内存的代码
lgstudyvc 2014-01-24
  • 打赏
  • 举报
回复
退出时怎么处理的? 一个线程一个文件,退出时释放
见习学术士 2014-01-24
  • 打赏
  • 举报
回复
在循环recv 中 判断 if (2 == ptNetInfo->m_nState) 退出

15,473

社区成员

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

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