快救救急吧!!!县城问题.

Eie 2000-04-04 08:53:00
MDI CFormView
我在InitdialogUpdata(CFormView)中初始化一个CListCtrl, 然后用
AfxBeginThread(InsertItems,this)
启动一个线程,在该线程中读文件并将文件数据填入CListCtrl,如下

UINT InsertItems(LPVOID pParam)
{
CMyView *pView=(CMyView *)lParam;
CMyDoc *pDoc =pView->GetDocument();
........//m_pFile已经在Doc的OnOpenDocument中创建并打开
int nLines=pDoc->m_pFile->GetFileLength()/LINE_BUFF_SIZE;
char buff[LINE_BUFF_SIZE];
for(int i=0;i<lines;i++)
{
//读文件并将.数据添入pView->m_List
//
if(::WaitForSingleobject(pView->m_evnCancled,0)==WAIT_OBJECT_0)
break;
}
pView->m_bReadFinished=TRUE;
return 0;
}

因为文件可能很大(1M--10M),所以在没有读完文件,用户电击了窗口的X退出
当前View或退出程序前,应该终止线程,我用下列代码却不行,而且必死无疑:

CMyView::OnDestroy()
{
CFormView::OnDestroy();
if(!this->m_bReadFinished)
this->m_evnCancled.SetEvent();
}
求高手指点迷津....
...全文
183 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2000-04-04
  • 打赏
  • 举报
回复
在OnClose()中调用AfxEndThread()应该可以把.
laole 2000-04-04
  • 打赏
  • 举报
回复
你可以添加一个参数,用来控制线程的运行情况,例如可以
定义一个结构:
struct tagParam
{
HWND hwnd;
BOOL bExit;
}PARAM;
在主线程中声明一个PARAM变量param,用来作为子线程的参数;
param.hwnd=this;
param.bExit=FALSE;
子线程改为:
for(int i=0;i<lines;i++)
{
//读文件并将.数据添入pView->m_List
//
if(param.bExit=TRUE)
break;
}
param.bExit=TRUE;
主线程的退出语句中加入以下的控制
if(!param.bExit)
{
param.bExit=TRUE;
WaitForSingleObject(子线程的句柄,等待时间);
~~~~~~在生成线 ~~~很短的时间就够了,例如10ms
程的时候获得
}
good luck!
literal 2000-04-04
  • 打赏
  • 举报
回复
你在线程中用了窗口指针,若线程未退出,而指针无效则必死无疑
sniper的意见不错,先杀死线程,再退出
Sniper 2000-04-04
  • 打赏
  • 举报
回复
你试一下这样修改,在调用基类OnDestroy()前令辅助线程退出,
CMyView::OnDestroy()
{
if(!this->m_bReadFinished)
this->m_evnCancled.SetEvent();
CFormView::OnDestroy();
}
另一方面,不知道

//读文件并将.数据添入pView->m_List
//
一段中是怎么写的,要注意配对清除。
Eie 2000-04-04
  • 打赏
  • 举报
回复
我在CFormView中不能捕获ON_WM_NCLBUTTONUP消息,在CChildFrame中也不能
lqjin 2000-04-04
  • 打赏
  • 举报
回复
用户电击了窗口的X退出当前View或退出程序时,
你可以弹出对话框询问用户是否退出或提示用户
操作未完成,用户确认退出后再按以下顺序操作:
1.增加用户电击窗口的X的消息处理函数
2.弹出询问对话框,确认就进行下一步
3.关闭线程
4.等待线程结束
5.再调用OnDestroy(),或其它退出函数

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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