- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图通过调用 WaitForSingleObject()
来确定一个进程是否仍然存在(在我检查的那一刻,我知道它可以在我检查后立即关闭)带句柄从Process.MainWindowHandle
得到这与 IsIconic()
一起工作得很好但它返回 WAIT_FAILED
和 GetLastError()
ERROR_INVALID_HANDLE
UInt32 r = WaitForSingleObject(handle, 0);
if(r == WAIT_OBJECT_0)
{
MessageBox.Show("still running!");
}
if(r == WAIT_FAILED)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
最佳答案
您不能等待窗口句柄。您可以将窗口句柄传递给与窗口相关的函数,例如 IsIconic()
,但它们不是内核对象,因此您不能等待它们。 The documentation给出一个你可以等待的对象列表:
The WaitForSingleObject function can wait for the following objects:
- Change notification
- Console input
- Event
- Memory resource notification
- Mutex
- Process
- Semaphore
- Thread
- Waitable timer
所以,如果你想等待一个进程直到它结束,你可以等待进程的句柄,它可以通过Process.Handle
访问。属性(property)。
但实际上您根本不需要 P/Invoke Win32 函数。 .NET Process
包装类有 WaitForExit()
和 WaitForInputIdle()
可用于等待进程的成员函数(请注意,两者都有采用超时值的重载)。
如果这是您使用 Process
类包装器开始的进程,您可以简单地询问 Process.HasExited
属性(property)。
关于c# - WaitForSingleObject 返回 ERROR_INVALID_HANDLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38018838/
这个问题已经有答案了: Why those two different behaviors with WaitForSingleObject function in CPP (2 个回答) 已关闭 5
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
我正在尝试唤醒我的电脑以防它进入休眠模式。我在某个网站上找到了这个代码片段,但我在最后添加的 Messagebox 总是立即返回。 我还在我的系统中启用了电源选项中的唤醒定时器。 [DllImport
我有两个功能: Fl_Thread n_create_thread(Fl_Thread &t, void *(*f) (void *), void *p) { return t = (Fl_T
下面的简单代码并没有像我预期的那样运行。它创建一个线程(挂起),启动它,等待它运行 1 毫秒并循环等待直到线程死亡或失败。 我希望输出是这样的: Start Callback running Call
我阅读了有关使用 WaitForSingleObject() 的不同主题,但我仍然不明白为什么我不能让它工作。我有一个使用 AfxBeginThread 更新的进度条,我想在执行另一个进程之前等待完成
h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FI
在 WinAPI 下有 WaitForSingleObject() 和 ReleaseMutex() 函数对。还有 Interlocked*() 函数族。我决定检查捕获单个互斥锁和交换互锁变量之间的性
我做 WaitForSingleObject(handle, timeout);如果在调用 WaitForSingleObject 之前 handle 已经发出信号,函数将返回什么? 我认为它应该立即
我正在使用 waitForAll 参数 = true 的 WaitForMultipleObject 函数。这里使用一个 std::vector 的 handle 对象来等待。如果这个函数超时了,那么
一些背景如果你感兴趣,否则你可以直接转到底部的问题: 我遇到了一个问题,我有一个无限的 while 循环,其中有两个 if 条件检查两个事件对象状态是否变为有信号。 while(1) { if
下面是一段代码。代码不完整,我省略了释放资源部分和QueryRes逻辑的实现。 #define N 5 /*simply resources manager which has N shared re
过去几天我一直在尝试为一个应用程序寻找一个好的架构,经过一些研究我终于卡住了,原因是 COM。 有问题的应用程序将有多个 GUI 线程,它们将为工作线程安排工作项。工作线程将通过 CoInitiali
我正在用 C 编写一个 win32 程序。 当您有多个线程在运行,并且其中一个线程正在等待一个事件(例如使用 WaitForSingleObject())时,该线程是否仍然获得其完整的 CPU 时间片
如果我设置 3 个线程等待释放互斥锁,它们是根据请求的顺序形成一个队列,还是未定义的行为(即我们不知道哪个会先接收它) ? 最佳答案 它在 SDK article 中明确记录: If more tha
在等待超时时间为零的事件时,WaitForSingleObject(或WaitForMultipleObjects)会导致上下文切换吗? (据我所知,Sleep(0) 将立即产生一个线程时间片。) 现
为了尝试如何使用 Win32 API 进行编程,我编写了一个创建进程的程序。然后我想检查我的进程是否等待新创建的进程,关闭句柄然后再次检查 WaitForSingleObject(第二个进程休眠 70
当您在使用 CreateFile() 或 _get_osfhandle() 创建的句柄上调用 WaitForSingleObject() 时会发生什么? 出于不值得解释的原因,我想使用 WaitFor
先仔细阅读问题。 有一个从 CTest 类的 CreateInstance 生成的工作线程。这是该类的原型(prototype)。 hThread 是线程句柄,hEventShutdown 是程序退出
我是一名优秀的程序员,十分优秀!