启动Process并稍后识别它
Starting Process and identify it later
现在我正在用c++编程一个类似cron的调度器。我的程序能够在特定时间启动作业并正确安排它们。给我留下麻烦的是检查一个过程是否仍然存在。
所以我有一张地图JobMap;其中填充了作为键的进程Handles和作为值的Jobs。我如何将这两种价值观联系起来?每当我尝试GetExitCodeProcess时,它永远不会返回STILL_ACTIVE。是否可以为流程设置一个唯一的令牌/密钥,以便我可以识别它并将其与作业关联起来?
任何想法都将是一个很大的帮助,非常感谢!
void Cron::CheckRunningJobs()
{
DatNowObj Today;
DWORD exitCode = 0;
// now iterate through the executed jobs and check their state
for(MC_STL_PTR(MapPtr,JobMap)) //MapPtr is a pointer for my map
{
DatStrNowObj Today; //gives actual date
DWORD exitCode = 0;
PROT()<<"Job Handle:"<<MapPtr->first <<"Job in Map: "<<MapPtr->second.Job->getDescription()<<endl;
// store the exit code for later use
MapPtr->second.exitCode = GetExitCodeProcess(MapPtr->first, &exitCode);
if(GetExitCodeProcess(MapPtr->first, &exitCode) == STILL_ACTIVE)
{
PROT()<<"PROCESS STILL ACTIVE"<<endl;
}
else if(GetExitCodeProcess(MapPtr->first, &exitCode) == ERROR_INVALID_FUNCTION)
{
CloseHandle(MapPtr->first);
continue;
}
else if(MapPtr->second.execTime)
{
}
else if(GetExitCodeProcess(MapPtr->first, &exitCode) == 0)
{
CloseHandle(MapPtr->first);
JobMap.erase(MapPtr);
PROT()<<"Job in Map after Erase: "<<MapPtr->second.Job->getDescription() << "and Map size: " << JobMap.size()<<endl;
continue;
}
else
{
PROT()<<"Error:"<<GetLastError()<<endl;
continue;
}
}
}
请阅读user6545984链接的文档。你在这里似乎很混乱。
GetExitCodeProcess()
返回一个BOOL
,指示函数是否成功,而不是进程是否成功。您正试图使用常量将其与BOOL
进行比较,就好像它是exitCode
一样。但它们是不兼容的类型。即使他们没有,我也不知道你为什么要一遍又一遍地调用函数!
要获得退出代码,您需要传入一个LPDWORD
指针来接收它。调用函数一次,将两个输出输入右侧的变量-一个返回值,一个输出参数-并对它们做出适当的响应。
所以,你至少需要改变这个
MapPtr->second.exitCode = GetExitCodeProcess(MapPtr->first, &exitCode);
类似
BOOL result = GetExitCodeProcess(MapPtr->first, &MapPtr->second.exitCode);
或者您想存储所述代码的其他地方-然后更新所有比较以匹配,如果需要,还可以将比较添加到result
。
BOOL WINAPI GetExitCodeProcess(
_In_ HANDLE hProcess,
_Out_ LPDWORD lpExitCode
);
它不会直接返回退出代码。在GetExitCodeProcess 上了解更多信息
相关文章:
- 提升 ASIO 无法识别计时器对象
- 从udp接收帧对于人脸识别来说太慢
- 模板类无法识别友元运算符
- std::visit无法识别类型
- 无法识别模板功能
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 如何在LLVM中dyn_cast以识别StoreInst?
- 从不同的附加依赖项中识别等同命名的函数
- C++出现控制台错误.我无法识别源代码的问题
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- Qt:"Q3DScatter"即使包含在内也无法识别
- 使用指针的类识别
- 如何静态识别动态堆分配?
- 为什么C++无法识别我的对象实例化?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- C++ 无法识别创建进程'telnet'
- 识别 2D 矢量C++中的位置
- 以某种方式告诉编译器"Do not process line of code"
- 如何识别项目是 QT 中的文件还是文件夹
- 启动Process并稍后识别它