#include <iostream>
#include <Windows.h>
#include <tchar.h>
using namespace std;DWORD WINAPI ThreadProc(LPVOID lpParameter);
HANDLE hMultex;
int main()
{
HANDLE handle1;
handle1 = CreateThread(NULL,0,ThreadProc,0,NULL,0);
CloseHandle(handle1);
hMultex = CreateMutex(NULL,true,_T("aaaaaaaaaaa")); if((hMultex!=NULL)&&GetLastError() == ERROR_ALREADY_EXISTS)
{
cout << "Only one instance can run !" << endl;
return 0;
}
ReleaseMutex(hMultex);
Sleep(1000);
}DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
while(true)
{
WaitForSingleObject(hMultex,INFINITE);
cout << "Test!" << endl;
ReleaseMutex(hMultex);
}
return 0;
}
vs2008 用互斥对象保证一个实例为什么总是不行?
解决方案 »
- CDialog的派生类,使用GetDlgCtrlID函数,值是0。怎样获得CDialog的CtrlID值?
- 请问用socket()可以抓到arp包吗?
- 请教ReadDirectoryChangesW的实现原理是什么?
- 关于鼠标拖动图片的问题Picture Control SetCapture
- 请教高手 如何删除access过期半年的数据?小弟不胜感激
- WEB下怎样实现大文件的上传功能
- 我刚刚买来了的visual studio.net出了问题了,救命啊
- 怎样屏蔽键盘和鼠标响应?在线等候中~~~~~~~~~~~!
- abc.exe / ? vc怎么编写这样带参数的程序?(高分送)
- 180分大讨论!有关线程和消息循环
- 线程方面的问题
- 利用橡皮筋技术画的直线怎么存入数据库中
都释放了,还能检测到同名的吗?
hMultex = CreateMutex(NULL,true,_T("aaaaaaaaaaa")); 中间参数为true
hMultex = CreateMutex(NULL,true,_T("aaaaaaaaaaa")); 后面也有名字
#include <Windows.h>
#include <tchar.h>
using namespace std;HANDLE hMultex;
int main()
{
hMultex = CreateMutex(NULL,true,_T("aaaaaaaaaaa")); if((hMultex!=NULL)&&GetLastError() == ERROR_ALREADY_EXISTS)
{
cout << "Only one instance can run !" << endl;
return 0;
}
ReleaseMutex(hMultex);
while(true)
{
Sleep(100);
}
}
#include <Windows.h>
#include <tchar.h>
using namespace std;DWORD WINAPI ThreadProc(LPVOID lpParameter);
HANDLE hMultex;
int main()
{
while(true){
hMultex = CreateMutex(NULL,true,_T("AABBCC"));
if((hMultex!=NULL)&&GetLastError() == ERROR_ALREADY_EXISTS)
{
cout << "Only one instance can run !" << endl;
return 0;
}else{
Sleep(1000);
cout << "Create Success!" << endl;
}
}
}我这个逻辑比你的好理解
应该先创建mutex,在创建线程
然后main要等到线程结束才释放hMutex