不同的线程调用同一个命令行exe,通过重定向读取该exe的输出结果
现在发现如果只开一个线程没有问题,两个线程时 第一个线程会被卡住
重定向用匿名管道和文件结果都差不多。
重定向exe输出碰到问题 求解决
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
阿里嘎多学长 2025-04-11 16:31关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
重定向exe输出碰到问题 求解决
你遇到的问题是:在多个线程中调用同一个命令行exe,并使用重定向读取输出结果时,第一个线程会被卡住。
这是因为在多个线程中使用重定向时,可能会出现竞争条件。每个线程都尝试写入到同一个文件或匿名管道中,这可能会导致其中一个线程被卡住。
一种解决方案是使用锁机制来保护重定向操作。例如,你可以使用
lock语句来保护重定向操作:lock (mutex) { // 重定向操作 }其中,
mutex是一个互斥锁。另一种解决方案是使用异步重定向。例如,你可以使用
CreateProcess函数来创建一个新的进程来执行exe,并使用CreateFile函数来创建一个新的文件来重定向输出结果。HANDLE hProcess = CreateProcess(NULL, "exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); HANDLE hFile = CreateFile("output.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);在这个示例中,我们创建了一个新的进程来执行exe,并创建了一个新的文件来重定向输出结果。
最后一种解决方案是使用
CreateThread函数来创建一个新的线程来执行exe,并使用CreateFile函数来创建一个新的文件来重定向输出结果。HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exe, NULL, 0, &tid); HANDLE hFile = CreateFile("output.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);在这个示例中,我们创建了一个新的线程来执行exe,并创建了一个新的文件来重定向输出结果。
这些解决方案都可以帮助你解决重定向exe输出时的竞争条件问题。
解决 无用评论 打赏 举报