system() 在 Windows 上的性能。(C++)

Performance of system() on Windows.(C++)

提问人:Azriel Elijay 提问时间:2/1/2023 最后编辑:JabberwockyAzriel Elijay 更新时间:2/1/2023 访问量:67

问:

int result = 0;
CString pCommand;
CString pIP;
pIP.Format("1.1.1.1");
pCommand.Format("netsh advfirewall firewall show rule name=\"TestRule : %s\"",pIP.GetString());

result = system(pCommand.GetString());

if ( Result == 1 )
{
    printf("Firewall Rule Not Found.\n");
}
else
{
    printf("Firewall Rule Found.\n");
}

每次我的应用程序收到 TCP 握手请求 (WINSOCK.h) 时,都会运行该代码。

鉴于上面的以下代码,我有以下问题。

  1. 我可以使用 ShellExecute/ShellExecuteEx 复制上述代码的结果吗?

  2. 如果是,它会提供比系统调用更好的性能,还是可以继续使用上面的代码?

  3. 使用 CreateProcess,而不是 system() 或 ShellExecute,并得到相同的结果会更好吗?

C++ 可视化工作室 2008 MFC

评论

4赞 Pepijn Kramer 2/1/2023
不要使用系统,不要使用创建过程,而是直接从 C++ 使用 Windows API。枚举防火墙规则
1赞 463035818_is_not_an_ai 2/1/2023
更好的性能总是需要你去衡量,否则你怎么知道什么是更好的。首先,我将测量直接调用命令和执行命令之间的差异system
0赞 Azriel Elijay 2/1/2023
@Pepijn Kramer,非常感谢您的链接!这更好,更快,更清晰!我什至不知道 Windows 防火墙有 API!非常感谢,我能够为我的用例编写一个快速代码!
0赞 Pepijn Kramer 2/1/2023
@AzrielElijay酷!很高兴你能让它工作得如此之快,我从未使用过 API 的这一部分。但我知道浏览 API 文档(内容不断添加)通常是值得的:)一般来说,如果有一个命令行实用程序,还有一个 api 可以做到这一点
0赞 Azriel Elijay 2/1/2023
@PepjinKramer 由于我不是程序员,而且这样做是出于我对旧 MMORPG 的爱好,这让我大开眼界。我不知道 Windows 有这样的 API。由于 VBA,我也有过 COM 对象的经验,这是一件好事,如果没有,我会泄露很多。谢谢你这么简洁的回答!

答: 暂无答案