什么时候卸载一个钩子解决办法

什么时候卸载一个钩子
#include <windows.h>



LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
 。。。
 return CallNextHookEx(g_hMouse, nCode, wParam, lParam);
}


int main(void)
{
 MSG msg;

 g_hMouse = SetWindowsHookEx( WH_MOUSE_LL, MouseProc, GetModuleHandle(NULL), 0 );
 if (!g_hMouse) printf("Hook error: %d\n", GetLastError());


 while ( GetMessage(&msg, NULL, 0, 0) )
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 UnhookWindowsHookEx(g_hMouse);
 printf("ok");
 return (int) msg.wParam;
}

如上 程序,请问什么时候卸载钩子,打印出呢?
我都是直接关闭进程的啊,

------解决方案--------------------
退出的时候
If the function retrieves a message other than WM_QUIT, the return value is nonzero.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx
------解决方案--------------------
你的线程结束后钩子会自动卸载
如果需要收到控制台关闭的消息,用SetConsoleCtrlHandler