可能这对你来说是个愚蠢的问题..但它对我不起作用!(WinRT 的新手 .. 也可能是 Windows!)只是尝试创建信号量并尝试获取它.. 没什么特别的。但它失败了 WAIT_FAILED: 5 (Access denied)
void MainPage::simple_Sema_test1()
{
HANDLE p_sema;
DWORD ret, err;
p_sema = CreateSemaphoreEx(NULL, 1, MAX_LIMIT, L"sema1", 0, SEMAPHORE_MODIFY_STATE);
if(p_sema == NULL)
print_on_textbox("CreateSemaphoreEx Failed!\n");
ret = WaitForSingleObjectEx(p_sema, 1000, TRUE);
switch(ret){
case WAIT_ABANDONED:
print_on_textbox("WAIT_ABANDONED\n");
case WAIT_IO_COMPLETION:
print_on_textbox("WAIT_IO_COMPLETION\n");
case WAIT_OBJECT_0:
print_on_textbox("WAIT_OBJECT_0\n");
case WAIT_TIMEOUT:
print_on_textbox("WAIT_TIMEOUT\n");
case WAIT_FAILED:
print_on_textbox("WAIT_FAILED: " + (GetLastError()).ToString());
}
编辑 <<<(部分解决)使用 SEMAPHORE_ALL_ACCESS 创建信号量
IE
*sema = CreateSemaphoreEx(NULL, initial, MAX_LIMIT, L"sema1", 0, SEMAPHORE_ALL_ACCESS);
如果有人知道为什么它不适用于修改访问,请解释!