首先看code(vs 2008下编译通过):
运行结果:
疑惑以及解释:(有什么不妥的地方,还请大家多多指教)
由于我这里设置等待的时间是0,所以在新建立的两个线程还未执行前,主线程已经执行到了getchar();
也就是说已经执行了closehandle(),那后面的两个线程怎么又能执行并打印结果呢?开始一直对这个问题
不解,通过翻阅了王艳平的《Windows程序设计》,才明白原来closehandle()并没有真正的销毁句柄
具体解释:
每次createthread()创建线程对象的时候,线程对象中Usage count的初始化值为2(注意不是1)
closehandle()能是Usage count的值减少1,这个时候Usage count的值为1,所以并没有销毁,只有
当线程执行的函数通过return结束的时候,Usage count继续减少1变为0,这个时候才真正的销毁对象