BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24990同步于 2008/4/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

一个多现成的问题,请教大牛

kangkai810
2008/4/19镜像同步7 回复
#include <stdio.h> #include <windows.h> HANDLE hThread_1; //定义一个全局变量为线程1的句柄 DWORD WINAPI FirstThread(PVOID pParam); //线程函数1 DWORD WINAPI SecondThread(PVOID pParam); //线程函数2 int main() { DWORD dwFirstThreadId; hThread_1 = CreateThread(NULL, 0, FirstThread, NULL, 0, &dwFirstThreadId); WaitForSingleObject(hThread_1,INFINITE); //等待线程1执行结束 return 1; } DWORD WINAPI FirstThread(PVOID pParam) { int x; printf("Start:&x:%p\n",&x); x=0; DWORD dwSecondThreadId; HANDLE hThread_2; //定义线程2句柄 hThread_2=CreateThread(NULL, //创建线程2 0, SecondThread, (PVOID)&x, //将线程1堆栈上的变量传给线程2 0, & dwSecondThreadId); CloseHandle(hThread_1); //在线程1中调用closehandle来释放线程1的资源,此时线程1的堆栈被破坏 WaitForSingleObject(hThread_2,INFINITE); return 1; } DWORD WINAPI SecondThread(PVOID pParam) { *((int*)pParam)=5; //在线程2中访问线程一堆栈上的变量 printf("x:%d \n", *((int*)pParam)); return 1; } 为什么我在函数FirstThread中已经用CloseHandl将线程1的堆栈破坏,为什么线程2还是可以访问线程1堆栈上的变量?而不会产生内存访问错误?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
rebirthatsix机器人#1 · 2008/4/20
我觉得可能是你对closehandle的理解有问题
CNLAS机器人#2 · 2008/4/20
re。。。去查查书吧。。。 【 在 rebirthatsix 的大作中提到: 】 : 我觉得可能是你对closehandle的理解有问题
kangkai810机器人#3 · 2008/4/20
我不知道该怎么理解CloseHandle书上和MSDN上都只是说他会释放内存 以上代码是我根据windows核心编程中讲的多线程写的,书上说这段代码会造成内存访问错误,但我试了却没有任何错误,不知道是为什么
CNLAS机器人#4 · 2008/4/20
closehandle只是减少了本可调度对象对handle值的一个引用计数。。。 只有全部的引用计数都为0时才会被os回收资源。。。closehandle本身不会清除资源的。。。 在线程1里减少对自己的引用计数不会对子线程和主线程有任何影响啊。。。 主线程的那个引用还是存在的啊。。。所以没有清空。。。
rebirthatsix机器人#5 · 2008/4/20
【 在 CNLAS 的大作中提到: 】 : closehandle只是减少了本可调度对象对handle值的一个引用计数。。。 : 只有全部的引用计数都为0时才会被os回收资源。。。closehandle本身不会清除资源的。。。 : 在线程1里减少对自己的引用计数不会对子线程和主线程有任何影响啊。。。 : ................... re
kangkai810机器人#6 · 2008/4/20
【 在 CNLAS 的大作中提到: 】 : closehandle只是减少了本可调度对象对handle值的一个引用计数。。。 : 只有全部的引用计数都为0时才会被os回收资源。。。closehandle本身不会清除资源的。。。 : 在线程1里减少对自己的引用计数不会对子线程和主线程有任何影响啊。。。 : ................... 向您致敬!!!!!
kangkai810机器人#7 · 2008/4/20
【 在 rebirthatsix 的大作中提到: 】 : re re