请教一个对话框初始化时开启线程的问题

hll127 2011-10-02 07:05:59
问题是这样的:我首先用VC的向导建立一个对话框程序,在对话框上加一个按钮,在按钮的处理函数里建立一个非模态对话框,示意代码如下:
void CTestDlg::OnBnClickedOk()
{
CThrdDlg* pdlg = new CThrdDlg;
pdlg->Create(IDD_THRD, NULL);
pdlg->ShowWindow(SW_SHOWNORMAL);
}

然后在这个新建的非模态对话框的初始化函数中,创建一个线程,如下:
BOOL CThrdDlg::OnInitDialog()
{
CDialog::OnInitDialog();

AfxBeginThread(Proc, NULL);

return TRUE;
}
我的问题是:现在我直接点关闭按钮把后建立的非模态对话框关闭了,那在初始化中开启的线程有没有被强制关闭,在开始的CTestDlg这个对话框中还可以向这个线程发消息吗?这个线程的父线程是谁呢?




...全文
109 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alpha.5 2011-10-03
  • 打赏
  • 举报
回复
学习,Mark..
hll127 2011-10-03
  • 打赏
  • 举报
回复
恩,明白了,就是和在“任务管理器-进程”里能看到的.exe相关对吧。
[Quote=引用 5 楼 hezhe1008 的回复:]
线程是跟进程相关 与对话框无关
[/Quote]
呔妖怪来嘛 2011-10-03
  • 打赏
  • 举报
回复
线程是跟进程相关 与对话框无关
hll127 2011-10-03
  • 打赏
  • 举报
回复
谢了,我自己试了一下,线程的确没有结束。
[Quote=引用 1 楼 caddor2011 的回复:]
第一个函数。。。。。。
第二个是。。。。。。
[/Quote]
caddor2011 2011-10-02
  • 打赏
  • 举报
回复
第三个问题,关于线程的,,,, 线程我也很菜,半桶水,


说的不对,请指出,谢谢。。

开启的那个线程,没有结束,

主线程就是你的CTestDlg这个工程程序!!

但你的线程函数运行完毕,线程就会结束。。。。。

或者你把住对话框关闭了。。。那么主线程结束,同事子线程被迫结束




caddor2011 2011-10-02
  • 打赏
  • 举报
回复
第一个函数, 那个对话框类指针是个局部变量, 函数一运行玩,变量就挂,造成内存泄露。。

这是第一个错误。。

第二个是: 你要改成 CTestDlg的成员变量,试试,可不可以做到?
如果不可以,那么加上一下代码:

MSG msg;

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

15,471

社区成员

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

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