Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程状态更改-是否有WinAPI为其获取回调?_Winapi - Fatal编程技术网

线程状态更改-是否有WinAPI为其获取回调?

线程状态更改-是否有WinAPI为其获取回调?,winapi,Winapi,我在某个控制台进程中有一个线程,其代码对我不可用。当其状态发生变化(例如变为空闲)时,是否有方法获得通知 可能是钩子API,甚至是内核模式API(如果没有其他方法…) 扩展: 我有传统的控制台应用程序,我必须在我的程序中操作。显然,与之交互的唯一方法是通过stdin。因此,我将它作为新的进程运行,并将命令发送到它的stdin。我从它的stdout中获取了一些文本,但它不是完全可预测的,因此我无法依靠它来知道它何时完成当前工作并准备好接收下一个命令。流程是这样的:我运行它,发送(例如)comman

我在某个控制台进程中有一个线程,其代码对我不可用。当其状态发生变化(例如变为空闲)时,是否有方法获得通知

可能是钩子API,甚至是内核模式API(如果没有其他方法…)

扩展: 我有传统的控制台应用程序,我必须在我的程序中操作。显然,与之交互的唯一方法是通过
stdin
。因此,我将它作为新的
进程运行
,并将命令发送到它的
stdin
。我从它的
stdout
中获取了一些文本,但它不是完全可预测的,因此我无法依靠它来知道它何时完成当前工作并准备好接收下一个命令。流程是这样的:我运行它,发送(例如)
command1
,等待它完成工作(一些
CPU
加载和一些
IO
操作),然后发出
command2
,依此类推,直到最后一个命令。当它完成最后一个命令的工作时,我可以优雅地关闭它(send
exit
command)。问题是,我有几个进程的这个控制台exe的同时工作

我可以:

  • 使用自上次
    stdout
    接收以来的超时-不好,因为它可能是一毫秒和一小时
  • 使用(例如)
    regex
    等待预期的输出来解析标准输出-不好。。。结果完全出乎意料。这几乎是随机的
  • 使用计时器,轮询其线程状态,并且仅当所有线程都处于
    wait
    状态时(而不是针对
    IO
    ),并且至少有一个线程正在等待用户输入()-这也不好:如果我同时使用多个进程,可能会对系统造成不必要的、非比例的负担
  • 所以我喜欢最后一个选项,我宁愿在这些线程空闲时触发事件,而不是轮询


    我希望它能很好地解释这个问题……

    你的实际目标是什么?@DavidHeffernan,知道进程何时空闲(不做任何计算/IO操作/打印文本/任何东西…),只是等待输入-不是轮询,只是事件驱动。你为什么想知道?我怀疑你提出的解决问题的办法是错误的。但是因为我们不知道问题所在,所以很难说。@DavidHeffernan我认为问题很简单。。。我希望在进程完成其工作并等待输入时收到通知(线程处于等待状态,其中一个或多个线程正在等待进程的
    stdin
    )。再一次——不是通过投票。考虑到你在两次尝试问这个问题时得到的回答,我认为这个问题需要更多的工作。很可能你提出的解决方案是错误的。然而,你似乎对解释这个问题一点也不感兴趣,就这样吧。祝你好运