如何在一个线程中结束另一个线程
以前我一直遵循老师教的方法, 在分线程中死循环判断一个BOOL变量, 主线程需要结束分线程时去设置这个BOOL变量的值使它自然退出
该方法分线程并不是立即被杀死的, 它必须走完此次循环到判断BOOL变量处才能结束
1. 如果有一些对象是主、分线程都要访问的, 那么可能在主线程中已经释放了它们而分线程任然访问它, 造成非法访问
2. 我有想过将这些对象的释放放在分线程判断BOOL变量退出线程时执行, 但是主线程的逻辑是很有可能在杀死分线程后又建立一个分线程, 此时根据这些对象是否存在而判断是否创建,这样旧的分线程暂时没有释放对象导致新线程建立时没有建立对象之后这些对象又被旧线程释放, 造成非法访问
3. 后来我又想在主线程wait分线程退出后再释放对象, 但如果分线程中有一些比较耗时的操作(例如IO。下载、解压等等), 那么主线程阻塞太久了
我想问问大家一般怎么解决这个问题。
1. 使用TerminateThread到底会导致哪些不良后果呢, 线程是否在TerminateThread执行结束后立即被杀死呢
我个人认为由于被杀死的线程不知道执行到何处, 可能会出现一些new了的资源、打开的句柄没有被释放, 不知道是否有其他坏处
2. 其他一些语言中封装好的线程类例如java中的interrupt是否也存在这个问题
3. 我现在遇到的问题是否都是因为主、分线程访问同一对象导致的(其实就相当于全局变量带来的危害一样), 是否应该完全避免
4. 大家在程序设计的时候一般都是怎么解决在一个线程中结束另一个线程的