...
QSystemSemaphore和我想像的有差距,没办法只好把QSharedMemory用上了,
以下代码在Ubuntu下测试通过:
#include <QApplication>
#include <QSystemSemaphore>
#include <QSharedMemory>
#include <QLabel>
#include <QtDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open);
sema.acquire();//在临界区操作共享内存 SharedMemory
QSharedMemory mem("SystemObject");//全局对象名
if (!mem.create(1))//如果全局对象以存在则退出
{
qDebug()<<mem.errorString();
sema.release();//如果是Unix系统,会自动释放。
return 0;
}
sema.release();//临界区
QLabel label("Demo");
label.show();
return app.exec();//释放栈上的mem对象。
}