关于只运行一个实例的问题 只运行一个实例,后开启的同实例启动即关闭。在关闭之前,还要通知原来已运行的进程,让它显示或做其他事情,应该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #include <windows.h>#include <iostream.h>DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data);DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data);int tickets=100;HANDLE g_hEvent;void main(){ HANDLE hThread1; HANDLE hThread2;// g_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);// g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); g_hEvent=CreateEvent(NULL,FALSE,FALSE,"tickets"); if(g_hEvent) { if(ERROR_ALREADY_EXISTS==GetLastError()) { cout<<"only one instance can run!"<<endl; return; } } hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); SetEvent(g_hEvent); Sleep(4000); CloseHandle(g_hEvent);}DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data){ while(TRUE) { WaitForSingleObject(g_hEvent,INFINITE);// ResetEvent(g_hEvent); if(tickets>0) { Sleep(1); cout<<"thread1 sell ticket : "<<tickets--<<endl; SetEvent(g_hEvent); } else { SetEvent(g_hEvent); break; } } return 0;}DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data){ while(TRUE) { WaitForSingleObject(g_hEvent,INFINITE);// ResetEvent(g_hEvent); if(tickets>0) { Sleep(1); SetEvent(g_hEvent); cout<<"thread2 sell ticket : "<<tickets--<<endl; } else { SetEvent(g_hEvent); break; } } return 0;}在这个里面在发个消息就可以实现了if(ERROR_ALREADY_EXISTS==GetLastError()) { cout<<"only one instance can run!"<<endl; return; } hEvent=::CreateEvent(NULL,FALSE,FALSE,"你的标识符"); //表示已经存在 if(hEvent!=NULL && (GetLastError()==ERROR_ALREADY_EXISTS)) { } XXXApp::InitInstance()CWnd * pWnd = NULL; pWnd = CWnd::FindWindow(NULL, "窗体标题"); if (pWnd) { SetForegroundWindow(pWnd->m_hWnd ); BringWindowToTop(pWnd->m_hWnd ); //向它发消息 。。 return false; } hEvent=::CreateEvent(NULL,FALSE,FALSE,"你的标识符"); //表示已经存在 if(hEvent!=NULL && (GetLastError()==ERROR_ALREADY_EXISTS)) { HWND hWnd = FindWindow("窗口类名",NULL); if(hWnd!=NULL) { ShowWindow(hWnd,SW_SHOWNORMAL); SetForegroundWindow(hWnd); SetActiveWindow(hWnd); } CloseHandle(hEvent); return FALSE; } http://www.vckbase.com/document/viewdoc/?id=672非常详细,比CreateEvent那种方法要好,记得结账哦 Finwindow()发送消息 或者给它焦点。然后新的工程再悄悄的退出 谢谢大家的建议,我还是使用的是FindWindow方法,当然前提是给我的主对话框注册一个类名,这样按类名查找到窗口指针,再让它显示,感觉这样好一点。结贴了。 从服务器端通过modem对客户端建立TCP/IP连接的问题 EDIT控件滚动条? 如何让List Control控件有Check,就是前面有个多选框 高分求解: select和FD_ISSET的用法? DEBUG和Release是什么?有什么区别吗? 综合解决Tree控件的背景色的问题!! 菜鸟求助----如何连接Mysql数据库啊! 菜鸟问题 送分!!我用CDaoDatabase 做的程序为何在别的机器上出现"无法对Dao/jet db引擎进行初始化"的错误??? windows media player控件 请教关于层叠窗口的问题 局域网整个目录复制问题
#include <windows.h>
#include <iostream.h>DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);int tickets=100;
HANDLE g_hEvent;void main()
{
HANDLE hThread1;
HANDLE hThread2;
// g_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
// g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
g_hEvent=CreateEvent(NULL,FALSE,FALSE,"tickets");
if(g_hEvent)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only one instance can run!"<<endl;
return;
}
} hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
SetEvent(g_hEvent); Sleep(4000);
CloseHandle(g_hEvent);
}DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
// ResetEvent(g_hEvent);
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
// ResetEvent(g_hEvent);
if(tickets>0)
{
Sleep(1);
SetEvent(g_hEvent);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}在这个里面在发个消息就可以实现了
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only one instance can run!"<<endl;
return;
}
hEvent=::CreateEvent(NULL,FALSE,FALSE,"你的标识符");
//表示已经存在
if(hEvent!=NULL && (GetLastError()==ERROR_ALREADY_EXISTS))
{
}
CWnd * pWnd = NULL;
pWnd = CWnd::FindWindow(NULL, "窗体标题");
if (pWnd) {
SetForegroundWindow(pWnd->m_hWnd );
BringWindowToTop(pWnd->m_hWnd );
//向它发消息 。。 return false;
}
hEvent=::CreateEvent(NULL,FALSE,FALSE,"你的标识符");
//表示已经存在
if(hEvent!=NULL && (GetLastError()==ERROR_ALREADY_EXISTS))
{
HWND hWnd = FindWindow("窗口类名",NULL);
if(hWnd!=NULL)
{
ShowWindow(hWnd,SW_SHOWNORMAL);
SetForegroundWindow(hWnd);
SetActiveWindow(hWnd);
}
CloseHandle(hEvent);
return FALSE;
}
非常详细,比CreateEvent那种方法要好,记得结账哦
发送消息 或者给它焦点。
然后新的工程再悄悄的退出