在C-S代码中,服务端负责启动各种客户端,如何防止同样客户端被重复启动?很简单,利用互斥对象可以轻松办的。
在客户端和服务端分别定义一个全局的互斥对象,每个客户端用客户端名称创建一个互斥对象,如果有重复客户端被启动,后面一个客户端创建同名互斥对象会失败,退出进程创建,达到目标。
#define APP_NAME_BLUETOOTH "Hibluetooth.exe"
#define APP_NAME APP_NAME_BLUETOOTH
static HANDLE g_hMutex = NULL;
gy_bool gy_app_begin()
{
gy_wstring appName = APP_NAME;
g_hMutex = ::CreateMutex(NULL, TRUE, appName .getString());
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
。。。
return false;
}
return true;
}
void gy_app_end()
{
if (g_hMutex)
{
::ReleaseMutex(g_hMutex);
::CloseHandle(g_hMutex);
g_hMutex = NULL;
}
}
然后在客户端的main函数里面
int main(int argc, char *argv[])
{
if (!gy_app_begin())
{
return -1;
}
。。。。
}