我正在创建一个对象,例如WhaitableTimer,我想与其他进程共享我的对象。
HANDLE htimerProcess = CreateWaitableTimer(NULL, FALSE, L"Time1");
HANDLE htimerProcess2 = CreateWaitableTimer(NULL, FALSE, L"Time1");
答案 0 :(得分:3)
从文档到CreateWaitableTimer
:
如果在函数调用之前存在命名的计时器对象,则 function返回现有对象和GetLastError的句柄 返回 ERROR_ALREADY_EXISTS 。
所以问题#1的答案是否定的,你没有创建一个新的内核对象 - 如果两个调用都成功,它们将引用相同的计时器。
如何证明它们是一样的?您可以通过在一个进程中调用SetWaitableTimer
并在另一个进程中等待它来完成此操作。
如果你想确保在第二个过程中获得相同的计时器对象,请调用OpenWaitableTimer
- 因为只有在计时器已经存在时才会成功。
答案 1 :(得分:0)
根据CreateWaitableTimer的描述,这是可能的:
如果函数成功,则返回值是计时器对象的句柄。如果在函数调用之前存在命名的计时器对象,则该函数返回现有对象的句柄,GetLastError返回ERROR_ALREADY_EXISTS。
因此,您应该检查句柄的值(而不是地址)和GetLastError()
的结果,看看您的实现是否成功。