用线程创建的窗口问题

mouse_xie 2009-02-03 04:57:59
1.先创建一个HANDLE hLoadingThread = ::CreateThread(NULL,0,Loading,(LPVOID)this,0,&dwLoadingThreadID);线程
2.然后在DWORD WINAPI Loading(LPVOID lParam)
{
CSplashDlg spalshDlg;
spalshDlg.DoModal();

return 0;
}创建一个窗口

3.最后用 DWORD code;
if(GetExitCodeThread(theApp.m_hThreadFlash,&code)) //MonitorComm 你创建的线程句柄
{
if(code==STILL_ACTIVE)
{
TerminateThread(theApp.m_hThreadFlash,0);
CloseHandle(theApp.m_hThreadFlash);
}
theApp.m_hThreadFlash = NULL;
}退出线程。
但为什么线程都关闭了。这个创建的窗口在存在而没有销毁?
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mouse_xie 2009-02-06
  • 打赏
  • 举报
回复
5楼 6楼的辛苦了。
5楼:恩,是可以关闭。程序中有他人在其他地方又开了一个同样的线程,而没有关闭。
感谢楼上各位提供帮助
biweilun 2009-02-04
  • 打赏
  • 举报
回复
TerminateThread(theApp.m_hThreadFlash,0);
CloseHandle(theApp.m_hThreadFlash);
这两句放在一起了,程序在结束线程的时候,可能还没有结束完毕,句柄就被你关闭了,没有算是真正的关闭了进程。
你应该等待,用WaitSingleObject等待其结束完毕,返回后你再关闭句柄
hityct1 2009-02-04
  • 打赏
  • 举报
回复
测试,可以关闭。虽然有毛病。

hLoadingThread = ::CreateThread(NULL,0,Loading,(LPVOID)this,0,0);

Sleep(3000);

DWORD code;
int ret = GetExitCodeThread(hLoadingThread,&code);
DWORD error= GetLastError();
if(ret) //MonitorComm 你创建的线程句柄
{
//char a[30];
//sprintf(a,"%x",code);
//MessageBox(NULL,"4",a,MB_OK);

if(code==STILL_ACTIVE)
{
BOOL b = TerminateThread(hLoadingThread,0);
error= GetLastError();
char d[30];
sprintf(d,"%x",error);
if(!b) MessageBox(NULL,"4",d,MB_OK);
CloseHandle(hLoadingThread);
}
}
else
{
char e[30];
sprintf(e,"%d",error);
MessageBox(NULL,"fail",e,MB_OK);
}
hityct1 2009-02-04
  • 打赏
  • 举报
回复
楼主关闭的线程是你创建的?怎么不是同一个句柄。
检查一下GetExitCodeThread和TerminateThread的返回值,看他们是否正确执行。
hityct1 2009-02-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Ghost90 的回复:]
调用 spalshDlg.DoModal(); 时线程函数就不往下执行了, 这时用3结束线程不起作用。
[/Quote]

理解错误了,停留在对话框,微软是有特殊处理的。与停留在一个循环或等待函数不同。
xsc2001 2009-02-03
  • 打赏
  • 举报
回复
一个问题是TerminateThread并不一定能终止一个线程,检查一个TerminateThread的返回值,是否成功。另一个问题是你的线程是创建了模式对话框。
Ghost90 2009-02-03
  • 打赏
  • 举报
回复
调用 spalshDlg.DoModal(); 时线程函数就不往下执行了, 这时用3结束线程不起作用。

15,979

社区成员

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

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