回 帖 发 新 帖 刷新版面

主题:关闭主线程的问题

主线程关闭的瞬间,子线程可能还在运行,如果此时子线程用到了主线程的资源就会出错,这个问题如何避免?

回复列表 (共9个回复)

沙发

在主线程里使用WaitForSingleObject等待子线程结束是不明智的,因为程序会在这里挂住

板凳

使用TerminateThread也不好,参考下面一个原因
http://blog.csdn.net/fatacy/archive/2009/08/17/4456049.aspx

3 楼

主线程关闭之前,先在主线程里把子线程全关闭掉,,能行么?

4 楼

[quote]在主线程里使用WaitForSingleObject等待子线程结束是不明智的,因为程序会在这里挂住[/quote]
“挂住”了应该去寻找死锁的原因,使用WaitForSingleObject应该是必须的吧

5 楼

我也遇到过死锁的事

我在子线程中调用GetWindowText等,在主线程中WaitForSingleObject,于是死了:)

6 楼

[quote]主线程关闭之前,先在主线程里把子线程全关闭掉,,能行么?[/quote]
我也想知道安全关闭子线程的方法呢

7 楼

[quote]我也遇到过死锁的事

我在子线程中调用GetWindowText等,在主线程中WaitForSingleObject,于是死了:)[/quote]
我也不知道挂住的具体原因

8 楼

知道原因了,主线程调用WaitForSingleObject等待子线程时,主线程会挂起一直等到子线程有信号或者超时,如果这时在子线程里对主线程的内容进行操作(例如GetWindowText获取主线程的窗口文本),由于主线程被挂住操作就会一直等待WaitForSingleObject返回,这样就造成了双方互相等待,死锁发生了:(

怀疑GetWindowText是通过消息循环来完成的,WaitForSingleObject导致主线程阻塞,也就导致了消息循环的阻塞。

9 楼

大家千万不要去外包公司,每天工作12小时,周末加班,工资很低,没有奖金!

我来回复

您尚未登录,请登录后再回复。点此登录或注册