C++拓展编程,在windows平台上,利用VScodde编写三个程序分别实现屏幕输出100个‘A’、100个’B’、100 个‘C’,分别编译为A.exe、B.exe.C.exe,编程实现调用3个.exe文件创建三个进程的操作,并能通过输入进程号关闭指定的进程。
时间: 2024-10-16 08:16:31 浏览: 40
在Windows平台上,使用Visual Studio Code (VSC) 和 C++ 编写多进程程序可以分为以下几个步骤:
1. **创建三个简单的输出程序**:
- 创建三个C++源文件(例如:output_A.cpp, output_B.cpp, output_C.cpp),每个文件分别输出100个'A', 'B', 和 'C'。这里给出一个简单的示例:
```cpp
#include <iostream>
int main() {
for (int i = 0; i < 100; ++i)
std::cout << 'A';
return 0;
}
```
对于每个输出程序,编译成独立的.exe文件。比如对于output_A.cpp,你可以运行命令`cl output_A.cpp /Feoutput_A.exe`。
2. **使用CreateProcess函数创建进程**:
在主程序(例如main.cpp)中,你需要使用Windows API中的`CreateProcess`函数来启动这些.exe文件。这里是一个简化的例子:
```cpp
#include <windows.h>
// 假设你有三个字符串,存储.exe文件路径
const char* exePaths[] = {"output_A.exe", "output_B.exe", "output_C.exe"};
const DWORD numExes = sizeof(exePaths) / sizeof(exePaths[0]);
for (size_t i = 0; i < numExes; ++i) {
STARTUPINFO si {};
PROCESS_INFORMATION pi {};
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(exePaths[i], NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
// 处理错误
std::cerr << "Failed to create process for " << exePaths[i] << std::endl;
} else {
CloseHandle(pi.hThread); // 不需要线程句柄
WaitForSingleObject(pi.hProcess, INFINITE); // 等待进程结束
CloseHandle(pi.hProcess); // 关闭进程句柄
}
}
```
3. **接收用户输入并关闭进程**:
用户可以通过标准输入获取进程号,然后遍历之前创建的所有进程,通过进程ID来结束它。这里需要引入`GetModuleFileName`函数来获取当前进程的名称,再与输入的进程号比较:
```cpp
// ...在上述代码之后...
int userInput;
std::cin >> userInput;
for (size_t i = 0; i < numExes; ++i) {
// 使用GetModuleFileName获取当前exe文件名
wchar_t fileName[MAX_PATH];
if (GetModuleFileName(NULL, fileName, MAX_PATH)) {
// 比较进程号
if (_wtoi(fileName) == userInput) {
TerminateProcess(pi.hProcess, 0); // 结束进程
break;
}
}
}
// ...其他清理操作...
```
阅读全文