返回信息流这道题ms笔试经常出现。如何解呢?
在网上找了一些资料,谁能解释一下原理呢?
方法1:
让程序只运行一个实例的简单实用的方法
//首先在InitInstance()函数中创建一个同步对象,如果(GetLastError()返回ERROR_ALREADY_EXISTS就表明存在
//一个应用实例了,返回false取消
// 创建同步对象
//By cryfish
hMutexOneInstantance=CreateMutex(NULL,TRUE,_T("PreventSecondInstance"));
if(GetLastError()==ERROR_ALREADY_EXISTS)
bFound=TRUE;
if(hMutexOneInstantance)
ReleaseMutex(hMutexOneInstantance);
if (bFound==TRUE)
{ ::AfxMessageBox("You have Run one");
return false;
}
方法2:
调用实现类
Process p = DCSingleInstance.GetRunningInstance();
if (p != null)
{
DCSingleInstance.HandleRunningInstance(p);
return;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #17242同步于 2008/12/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
如何只运行一个实例?
lodas
2008/12/8镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
貌似是考察设计模式中的 Singleton 模式吧?
限定在windows上面估计知道的人很少啊
【 在 lodas (banlist 常客) 的大作中提到: 】
: 这道题ms笔试经常出现。如何解呢?
: 在网上找了一些资料,谁能解释一下原理呢?
: 方法1:
: ...................
【 在 vi 的大作中提到: 】
: 貌似是考察设计模式中的 Singleton 模式吧?
: 限定在windows上面估计知道的人很少啊
只能说你知道的太少...
在MSDN上查 CreateMutex
main() {
if( fileExists("C:\\MyLock.lck") ) {
warn("An instance is already running!");
exit(1);
}
createFile("C:\\MyLock.lck");
doSomething();
doSomething();
doSomethingElse();
deleteFile("C:\\MyLock.lck");
return 0;
}
同步起来有点问题吧,呵呵
【 在 wks (cloverprince) 的大作中提到: 】
: main() {
: if( fileExists("C:\\MyLock.lck") ) {
: warn("An instance is already running!");
: ...................
lck文件里写已运行进程的pid,防止程序意外退出lck文件没删除
【 在 wks (cloverprince) 的大作中提到: 】
: main() {
: if( fileExists("C:\\MyLock.lck") ) {
: warn("An instance is already running!");
: ...................