64,642
社区成员
发帖
与我相关
我的任务
分享
static HHOOK g_hHook;
static bool g_bExit = false;
/////////////////////////////////////////////////////////////////
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
PMSLLHOOKSTRUCT pMouseInfo = (PMSLLHOOKSTRUCT)lParam;
if(nCode>=0 && wParam == WM_LBUTTONDOWN)
{
if(::SendMessage(::GetConsoleWindow(), WM_NCHITTEST, 0, pMouseInfo->pt.x + (pMouseInfo->pt.y<<16)) == HTCLOSE)
{
PostThreadMessage(GetCurrentThreadId(), UM_CLOSE, 0 , 0);
return TRUE;
}
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
int main(int argc, char* argv[])
{
///////////
g_hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
HANDLE hListenThread = (HANDLE)_beginthreadex(NULL, 0, ListenTask, &sock, 0, NULL);
MSG msg;
BOOL bRet;
while( bRet=::GetMessage(&msg, NULL, 0, 0) )
{
if (bRet == -1)
{
printf("GetMessage fail: errVal=%d]n", ::GetLastError());
system("pause");
break;
}
if( msg.message == UM_CLOSE
&& ::MessageBox(::GetConsoleWindow(), "Confirm exit yes or not", "CenterServer", MB_YESNO) == IDYES )
{
g_bExit = true;
break;
}
}
::WaitForSingleObject(hListenThread, INFINITE);
::shutdown(sock, SD_BOTH);
::closesocket(sock);
//CThread::Delete();
::WSACleanup();
UnhookWindowsHookEx(g_hHook);
return 0;
}
#include <stdio.h>
#include <windows.h>
/*volatile*/ bool g_bExit = false;
BOOL CALLBACK CosonleHandler(DWORD ev)
{
BOOL bRet = FALSE;
switch (ev)
{
case CTRL_CLOSE_EVENT:
printf("exiting ...\n");
g_bExit = true;
bRet = TRUE;
break;
default:
break;
}
return bRet;
}
int main()
{
SetConsoleCtrlHandler(CosonleHandler, TRUE);
while(!g_bExit);
printf("exit\n");
system("pause");
return 0;
}
int main()
{
SetConsoleCtrlHandler(CosonleHandler, TRUE);
while(!g_bExit);
int i = 0;
while(TRUE)
{
printf("%d\n", i++);
}
printf("exit\n");
system("pause");
return 0;
}
可以看到printf只执行了可能一秒时间程序就退出了,并非MSDN上说的5秒。而且就算是5秒,也不能保证5秒之内一定能把所有处理完(PS:为什么MSDN上说是5秒,而实际是1秒,有知道的网友请@我告知#include "stdafx.h"
#include <Windows.h>
/*volatile*/ bool g_bExit = false;
BOOL CALLBACK CosonleHandler(DWORD ev)
{
BOOL bRet = FALSE;
switch (ev)
{
case CTRL_CLOSE_EVENT:
g_bExit = true;
bRet = TRUE;
break;
default:
break;
}
return bRet;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleCtrlHandler(CosonleHandler, TRUE);
while(!g_bExit);
printf("exit\n");
system("pause");
return 0;
}