进程中只有一个线程

xinustc 2008-12-08 03:59:46
刚刚接触windows编程,对进程和线程不是很了解

这是windows核心编程的一段代码:创建了一个进程,如果成功马上把线程关闭,再执行下面操作。
我不太明白,创建的进程应该只有一个线程吧,为什么要关闭?我看到一个说法是:进程都是通过
线程来执行操作的。那么干吗要关闭线程呢?


PROCESS_INFORMATION pi;
DWORD dwExitCode;
// Spawn the child process.
BOOL fSuccess = CreateProcess(..., &pi);
if (fSuccess) {
// Close the thread handle as soon as it is no longer needed!
CloseHandle(pi.hThread);
// Suspend our execution until the child has terminated.
WaitForSingleObject(pi.hProcess, INFINITE);
// The child process terminated; get its exit code.
GetExitCodeProcess(pi.hProcess, &dwExitCode);
// Close the process handle as soon as it is no longer needed.
CloseHandle(pi.hProcess);
}
...全文
433 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
riseforest 2008-12-08
  • 打赏
  • 举报
回复
可以理解为断开联系,但不一定是子进程,只要是内核对象都可以关闭
yaozhu88 2008-12-08
  • 打赏
  • 举报
回复
1,建立一个进程时,它会建立一个进程内核对象和一个线程内核对象,并且此时内核对象计数都为2.你CloseHandle(pi.hThread);时只是减少一个线程内核对象的计数而已,变为1.不会影响到这个线程的执行,你的这个线程执行玩了的话,它也会减少此线程内核对象的计数变为0.此时线程内核对象也会挂了。就不会泄露内存啦。

2,断开父进程与子进程的联系也是对的,explorer进程创建子进程的确也是这样做的。
路人乙2019 2008-12-08
  • 打赏
  • 举报
回复
进程只有一个主线程,但可以有多个子线程。子线程都用createthread或_beginthread等函数创建,当然要关闭。但主线程是不需要创建地。
xinustc 2008-12-08
  • 打赏
  • 举报
回复
稍稍懂了 这里只是父进程断开与子进程的联系的一个过程 这样理解对吗?
wocow3 2008-12-08
  • 打赏
  • 举报
回复
CloseHandle并不是关闭线程进程,只是告诉kernel,这个句柄在当前进程中已经不再需要,通知kernel
CloseHandle只是做些清理工作,比如内核可能会对hThread引用计数--
也就是说,你的线程还在运行(CloseHandle(pi.hThread);)
riseforest 2008-12-08
  • 打赏
  • 举报
回复
创建的进程不一定只有一个线程,也可能是多线程的

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧