问题标签 [waitforsingleobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-c++ - CreateProcess 创建 2 个进程时如何等待子进程。rundll32 进程,它在内部创建 Windows 照片查看器进程
我已经创建了CreateProcess()
使用 Windows 照片查看器打开图像的过程。由于 Windows Photo Viewer 不是 .exe,它是通过 调用的rundll32.exe
,因此创建了 2 个进程,因此rundll32.exe
成为父进程,Windows Photo Viewer 是子进程。现在我想等待创建子进程。如何等待子进程?
它正在等待无限的时间,如果我以毫秒为单位给出一些时间,WaitForSingleObject(pi.hProcess, 500)
那么它正在返回WAIT_TIMEOUT
。
我已经附上了图像,每当我打电话时CreateProcess
,它都会为每个图像创建两个进程,如附件中所示。从任务管理器关闭 rundll32.exe 会同时关闭进程和图像窗口,而rundll32.exe
*32 既不关闭rundll32.exe
也不关闭 windows 图像查看器。
此代码将正确的子 ProcessID 返回为 12504,但从从中CreateProcess
检索到的 IDpi.dwProcessId
是 12132。
现在我的要求是等待进程 ID 12504 直到它没有被创建。我已经使用下面编写的代码进行了尝试:
它正在工作,但还有其他选择吗?
windows - 如何锁定具有多个计数的信号量
信号量是一个计数对象。问题是如何用多个计数锁定它?
例如,我想调用lock(num, timeout)
函数。它在至少有num
可用资源时锁定,或在通过时失败timeout
,但仍有资源少于 num
.
在 Windows 上可以吗?或者也许使用pthread?
目前在 Windows 上,WaitForSingleObject
将对象的计数减少1
. 我认为WaitForSingleObject
多次调用无法解决问题,因为:
准确的超时很难实现,并且
num
我想在资源全部可用时处理数据(写入磁盘) (写入更大尺寸的数据更快)。因此,例如,如果少于num
资源被单独锁定,那么我可能不得不释放(在我锁定之后)它们以供下次使用,因为即使超时通过,其余的资源仍然不可用。我认为这是一个糟糕的设计。需要帮助。
c++ - 在 cmd 中运行 Matlab 代码并等待它完成
我想在我的 c++ 程序中运行一个 matlab 代码并等待 Matlab 的结果,然后继续我的 c++ 代码。问题是程序不等待 matlab 并继续运行。我应该在我的代码中添加任何内容吗?
实际上我尝试创建进程并使用 WaitForSingleObject。
waitforsingleobject - WaitForSingleObject 总是返回 WAIT_OBJECT_0
我没有设置事件信号,但 WaitForSingleObject 总是返回。我在主线程中创建一个事件。
然后在另一个线程中,我使用 WaitForSingleObject 等待事件发出信号。
`
`
我发现 WaitForSingleObject 总是返回 WAIT_OBJECT_0。仅在一个地方调用 setevent。该机器有一个单核CPU。
multithreading - 使用 WaitForSingleObject() 等待 TThread 完成
我正在创建一个线程,然后说要等待它通过 WFSO 调用终止(下面是简化的伪代码,显然没有人想在创建线程后立即等待它)。
在主线程中
我在做什么错/错过了什么?如果我没有 WFSO,线程将在大约 10 秒内完成。
编辑:使用 FreeOnTerminate=false 创建不会产生此问题。
windows - windows WaitForMultipleObjects / MsgWaitForMultipleObjects 的区别
我试图了解MsgWaitFor
和WaitFor
功能之间的区别。
1)我知道MsgWaitFor
在消息循环下运行,而WaitFor
没有?
2)MsgWaitFor
对于需要连续接收一系列事件的应用程序,这些功能是否更好?Windows 是否对消息进行排队,以便应用程序不会错过任何事件?假设应用程序想要接收事件A
并且B
经常发生。应用程序将打开一个线程:
问题是,当线程忙于处理时,这意味着它当前没有被WaitForMultipleObjects
. 线程如何避免错过事件,直到它回到等待状态?
python - 使用 ctypes 或类似方法在 Python 中包装 pthread 事件(或 Windows 信号)
我正在使用 ctypes 访问外部 C 库中的函数(我只有二进制文件和头文件,没有源代码)。我得到了这个工作,到目前为止一切都很好。
现在,可以设置该库以发送事件。库中的 setup 函数需要传递一个指向事件的指针。这应该用于 Windows 风格的 CreateEvent/WaitForSingleObject 信号机制或 POSIX 类型的 pthread 方式(顺便说一句,我在 Linux 下做所有这些)。
我现在想在 Python 中使用它。我不清楚的是:
- 如何在 Python 中创建具有正确类型的 pthread 样式事件对象,以便我可以将其传递给库,然后库可以设置它?
- 然后如何监视此事件以在每次设置时调用 Python 函数?
我不知道 pthread 的内部工作原理以及设置事件时实际发生的情况,所以我不知道库真正期望我提供什么样的对象以及它将如何处理它。我开始深入研究 Linux 内核头文件以了解如何定义 pthread_cond_t 等,设置事件时会发生什么等等,但结果证明这是对头文件、跟踪结构和联合定义以及嵌套定义的毫无意义的追逐; 这超出了我的范围。
我尝试了几种可用的 Python 事件实现(参见例如Python 中的事件系统),但它们没有 pthread 类型的事件,而是它们自己的 Pythonic 事件对象。如果我将其中一个传递给 FT 库,则要么根本没有任何反应,要么会出现段错误,如果您疯狂地混合不兼容的类型,这是可以理解的。所以这些实现都不适合我的情况(除非我错过了另一个)。
我还尝试定义具有正确大小的二进制字节的 ctypes blob(由 sizeof(pthread_cond_t) 等确定);我可以将指向它的指针传递给 FTlib,而不会出现任何段错误或 Python 错误,但是当事件发生时,我看不到该 blob 的任何更改。当然,由于我不知道应该发生什么或必须提供哪些先决条件才能使此事件机制起作用,所以我在这里完全一无所知。
所以这种方法,即使我最终可能让它工作,看起来毫无意义,丑陋并且没有多大意义。它还剥夺了我原来 pthread-event 所具有的任何互斥锁功能;所以必须有一个更好,更清洁的方法。
顺便说一句,有PyFtdi,FTDI 驱动程序的纯 Python 实现,以及一些其他驱动程序或包装器,但这些也无济于事,因为它们 a) 不支持我正在使用的设备(至少没有任何特殊功能设备提供)和b)它们根本不实现事件机制。因此,除非我错过了另一个实现,否则这也不是要走的路。
当然,我用谷歌搜索并搜索了 SO,但找不到任何人已经正确实施了这一点,即使我确信以前已经这样做过;必须处理从 C 库发出的 pthread 事件(或 Windows 信号)对我来说似乎不是一个非常奇特的应用程序。
所以,目前我真的不知道该去哪里以及接下来要尝试什么,我需要一些灵感......
编辑:C 中的代码片段: 基本上,这就是我想在 Python 中重现的内容。
任何帮助表示赞赏,
肖恩
c - 如何在没有 INFINITE 标志的情况下使用 CreateProcess 和 WaitForSingleObject?
我想要执行通用命令的非阻塞方式,我想在它开始执行命令后检查进程的状态,但我注意到 WaitForSingleObject 返回的不是 WAIT_TIMEOUT,即使进程仍在执行命令. 我没有在 WaitForSingleObject() 中使用 INFINITE 标志,因为我需要执行与检查其他进程的状态相关的其他任务。
以下是上述程序的代码,这是检查子进程是否完成的正确方法吗?
有时我们会从 WaitForSingleObject 获得 WAIT_OBJECT_0,即使进程没有完成。这是预期的吗?
test_sample.bat
multithreading - 当从应用程序全局调用时,线程的 WaitForSingleObject 冻结
我创建了一个线程作为某个池的一部分,当应用程序(实际上是 DLL)完成时需要销毁该线程。所以我有一些“全局变量”,这意味着一个静态全局实例化的结构,在析构函数中它释放任何创建的线程并使用 WaitForSingleObject 等待它们。不幸的是,这永远冻结了,检查调试器显示线程仍然存在,只是卡在系统 DLL 的某个地方。当我在全局变量被释放之前调用它时,一切都很好。我在 Win32 文档中没有看到任何提及这一点。有任何想法吗?
c++ - 使用“CreateProcess”调用的进程 (.exe) 粉碎
我有一个.exe
它自己“运行”正常,没有错误。我打电话给它,CreateProcess()
我打电话WaitForSingleObject()
知道它什么时候完成,什么时候WaitForSingleObject()
被称为“子”进程粉碎。
编码:
被调用.exe
者从文件中读取,进行一些(我会说很轻)计算和堆分配,而不打印任何内容,然后将结果写入另一个文件。如果它找不到它创建的文件,我尝试将它读取的文件复制到调用所在的.exe
位置,但没有任何改变。