У меня проблема с семафорами в 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-приложение запущено, после выполнения приложения MSVC2008 оно печатает один "Привет"на экране.Но это не доза.В чем проблема?!
Примечание: я использую Windows 7 и MinGW компилятор для Qt