【发布时间】:2012-03-08 12:58:31
【问题描述】:
Windows 中两个应用程序之间的信号量存在问题。一个应用程序等待释放信号(Qt),另一个应用程序发送释放信号(MSVC2008)。但它不起作用。
我测试了 Qt-Qt 和 MSVC2008-MSVC2008 模式,它们都成功了。但是当我尝试 Qt-MSVC2008 模式时它失败了。
// MSVC2008:
#include <windows.h>
#include <stdio.h>
int main()
{
const WCHAR semName[] = L"TestSem";
PHANDLE sem = (HANDLE *) CreateSemaphore (NULL, 0, 1, semName);
if (sem == NULL)
{
sem = (HANDLE *)OpenSemaphore (SEMAPHORE_ALL_ACCESS, 0, semName);
}
if (sem == NULL)
{
printf("OPEN/CREATE ERROR\n");
return 0;
}
BOOL r = ReleaseSemaphore(sem, 1 ,NULL);
if (r)
printf("OK\n");
else
printf("RELEASE ERROR\n");
CloseHandle (sem);
return 0;
}
和
// Qt 4.8.0 :
#include <QSystemSemaphore>
#include <QCoreApplication>
#include <iostream>
int main()
{
QSystemSemaphore *sem_read = new QSystemSemaphore("TestSem");
std::cout << "Wait for signal: " << std::endl;
while (1)
{
sem_read->acquire();
std::cout << "Hi" << std::endl;
}
return 0;
}
我希望当 Qt-app 运行时,在执行 MSVC2008-app 后,它会在屏幕上打印一个“Hi”。但它没有。有什么问题?!
注意:我正在为 Qt 使用 Windows 7 和 MinGW 编译器
【问题讨论】:
-
你确认你使用MSVC2008来编译你的Qt App吗?
标签: c++ qt winapi visual-c++ semaphore