我在“Windows.h”lib中看到了这三个连接函数,我想知道如何使用它们以及为什么要使用它们? 我试图在谷歌或MSDN文档中搜索信息,但我一无所获!
如果有人可以向我解释我应该如何(以及我为什么......)使用这三个连接的功能,这对我和其他1000个同样站在同一问题面前的人来说会很棒并将访问这里解决它。
那么,在一个简单的代码示例中,我应该如何使用每个函数?
答案 0 :(得分:1)
问题可能过于宽泛,但由于the documentation涵盖了技术细节,读者可能会受益于更高层次的观点,包括C ++特定方面。
GetExitCodeProcess
。 GetExitCodeProcess
用于检查流程的退出代码。按照惯例,在Windows,Unix和C ++中,退出代码0(例如,从main
返回)表示成功。在C ++中,此值可用作EXIT_SUCCESS
的宏符号<stdlib.h>
。在其他系统上EXIT_SUCCESS
不需要为0,但在C ++中,退出代码0始终表示成功,可能除了EXIT_SUCCESS
的值之外。
Windows和Unix-land约定是任何其他退出代码表示失败,但C ++中唯一的便携式失败值是由EXIT_FAILURE
表示的值。在Windows中,这通常是值1.不幸的是,它与Windows错误代码的值相冲突,关于“不正确的函数”(由errlook.exe
报告)。出于这个原因,人们可以选择使用Windows&#39;自己的一般失败值E_FAIL
表示一般失败,而不是使用便携但不完美的EXIT_FAILURE
。
Windows和Unix-land之间的两个相关差异:
在Windows中,非零退出代码通常是一个错误代码,可以告诉您有关失败原因的信息。它可以传递给Microsoft的工具 errlook
以获取文本说明,与通过API函数 FormatMessage
。在Unix-land进程中,用作失败原因的退出代码不太常见。
在Unix-land工具中,通常可以依靠退出代码来指示失败或成功。在Windows中不是这样。甚至许多内置命令和标准命令都不能这样做。
特别是后一点对GetExitCodeProcess
的使用很重要。您需要知道您正在检查的流程是一个产生有意义的退出代码的流程。
另请注意,代码 STILL_ACTIVE
被定义为较低的数字,因为我记得约270左右,并且可以由流程生成,因此它不是过程是否仍然有效的可靠指标。即,不要使用GetExitCodeProcess
来轮询完成的过程。取决于过程和&amp;情况,这样的代码可能会挂起......
WaitForSingleObject
。如上所述,可以通过使用GetExitCodeProcess
轮询其退出代码(可能会挂起)来等待进程结束,而是使用例如 WaitForSingleObject
或家庭成员。
CreateProcess
。 CreateProcess
以前是创建新流程的基本方法,由ShellExecute
等更高级别的功能在内部使用。
随着用户访问控制安全性(UAC)的出现,需要使用 ShellExecute
(或家庭成员)来运行具有提升访问权限的流程。
如果要启动的进程是控制台子系统进程,使用C ++标准库的 system
函数通常会更方便,该函数使用{{ 1}}命令解释器运行指定的命令,等待结束,并返回进程退出代码。