社区
VCL组件使用和开发
帖子详情
请教:线程删除句柄异常,使用resume后,导致怪异现象。
winnywang
2004-12-20 08:25:41
1。一个很奇怪的事情,我得程序里面是用了CB的多线程,退出时已经调用了线程terminate方法,线程也已经从execute中退出。可是当delete线程句柄时,总有中断。不知原因?
2。后来在delete操作前加入resume操作,虽然delete没有中断,但是发现偶尔有进程挂在进行列表中不能退出的情况,郁闷,请问原因?
3。请教正确释放线程句柄的方法。
...全文
151
8
打赏
收藏
请教:线程删除句柄异常,使用resume后,导致怪异现象。
1。一个很奇怪的事情,我得程序里面是用了CB的多线程,退出时已经调用了线程terminate方法,线程也已经从execute中退出。可是当delete线程句柄时,总有中断。不知原因? 2。后来在delete操作前加入resume操作,虽然delete没有中断,但是发现偶尔有进程挂在进行列表中不能退出的情况,郁闷,请问原因? 3。请教正确释放线程句柄的方法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
特招
2005-01-02
打赏
举报
回复
up
yuanreid
2004-12-31
打赏
举报
回复
好久没有回来看这个帖子了,正如boyla(土著巫师)所说,Execute方法中不能有永久循环,同时要定时检查Terminated属性是否为真,如为真就结束线程函数。
如下的例子就是一个不好的例子(即使判断了Terminated属性)
因为GetQueuedCompletionStatus操作是永久等待。因此线程函数在结束时,会一直等待。因此在设计线程函数时要考虑留给判断Terminated属性的机会。
void __fastcall YourThreadClass::Execute()
{
……
while (!Terminated)
{
error = NO_ERROR;
rc = GetQueuedCompletionStatus(
CompletionPort,
&BytesTransfered,
(PULONG_PTR)&Key,
&lpOverlapped,
INFINITE
);
bufobj = CONTAINING_RECORD(lpOverlapped, BUFFER_OBJ, ol);
//DO your Socket Job
……
}
}
土著巫师
2004-12-29
打赏
举报
回复
1、
thread->Terminate();
threae->WaitFor();
delete thread;
2、Execute()方法里一定要用while(!Terminated){...},否则线程是退不出来的,直到线程执行完毕,因为Terminate方法在内部就是把Terminated置为true,这样才可以退出来。
tsk
2004-12-29
打赏
举报
回复
我也遇到同题,Thread->WaitFor();线程不返回,不知怎么回事!
winnywang
2004-12-21
打赏
举报
回复
to MEFULEU(没有作不到,只有想不到) ,FreeOnTerminate不行,因为关闭的时候线程访问界面,导致中断。
to yuanreid(闲云孤鹤) thread->WaitFor()是怎么个意思?因为我已经在teminate之后使用了win32的msgwaitfor。。。。来使得线程退出。但是释放的时候还是出中断
yuanreid
2004-12-20
打赏
举报
回复
thread->WaitFor();
yuanreid
2004-12-20
打赏
举报
回复
thread->Terminate();
threae->WaitFor();
delete thread;
这样才够安全。
MEFULEU
2004-12-20
打赏
举报
回复
使用 FreeOnTerminate=true;
c++ 多
线程
:
线程
句柄
可以提前关闭,但是
线程
并没有关闭
1,
线程
和
线程
句柄
(Handle)不是一个东西,
线程
是在cpu上运行的.....(说不清楚了),
线程
句柄
是一个内核对象。我们可以通过
句柄
来操作
线程
,但是
线程
的生命周期和
线程
句柄
的生命周期不一样的。
线程
的生命周期就是...
线程
、
线程
句柄
、
线程
ID
而
线程
的
句柄
并不是
线程
的唯一标识,
线程
的
句柄
只是用来访问该
线程
的的一个32位值,尽管相同的
句柄
一定标识同一
线程
,但同一
线程
可能拥有两个打开的
句柄
,因此,不能用
句柄
来区分两个
线程
是否是同一
线程
。...
线程
ID与
线程
句柄
有啥不同
当某个程序创建一个
线程
后,会产生一个
线程
的
句柄
,
线程
的
句柄
主要用来控制整个
线程
的运行,例如停止、挂起或设置
线程
的优先级等操作。
线程
句柄
与
线程
ID的区别: ●CreateThread() API 用于创建
线程
。 API 返回...
创建
线程
后为什么关闭了
线程
句柄
,
线程
还是可以运行?
主
线程
只要拥有
线程
句柄
,事后就可以对
线程
执行某些操作,比如查询
线程
状态等等,靠的就是
句柄
,如果没有
句柄
,系统就无从知道要查的是那个
线程
的状态。但保持这个
句柄
不关闭,并不是
线程
运行的条件。 关闭
线程
...
线程
句柄
有什么用?
欣赏一下,如何
使用
线程
句柄
HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, this, 0, NULL); if (hThread) { CloseHandle(hThread); } 问题:
线程
句柄
有什么用? 1
线程
句柄
是内核对象。
线程
,是工作...
VCL组件使用和开发
604
社区成员
13,460
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章