控制台程序如何保持循环,并能正确处理退出

bj_leo_2000 2007-01-09 02:12:46
int main(int argc, char* argv[])
{
printf("服务器启动\r\n");
//创建服务器循环等待
ghController = CreateEvent(NULL, FALSE, FALSE, NULL);
WaitForSingleObject(ghController,INFINITE);
//关闭服务器
printf("服务器关闭");
return 0;
}
这样到是可以保证主线程循环了,但无法处理退出。
...全文
494 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyongjie 2007-02-04
  • 打赏
  • 举报
回复
WaitForSingleObject(ghController,INFINITE);//一直等在这里了

在另一线程要运行SetEvent才能退出
bj_leo_2000 2007-01-11
  • 打赏
  • 举报
回复
to Waiting4you(毛毛)
这段代码是截获消息再抛给自己?
Waiting4you 2007-01-11
  • 打赏
  • 举报
回复
MSDN上说SetConsoleCtrlHandler就是处理Ctrl+C或直接关闭之类的事件的

PostThreadMessage (g_main_tid, WM_QUIT, 0, 0);是让消息循环退出

这段代码实际上什么也没做.
laowang2 2007-01-11
  • 打赏
  • 举报
回复
mark
Waiting4you 2007-01-10
  • 打赏
  • 举报
回复
老妖网上的:
DWORD g_main_tid = 0;
HHOOK g_kb_hook = 0;

bool CALLBACK con_handler (DWORD)
{
PostThreadMessage (g_main_tid, WM_QUIT, 0, 0);
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=984&d=es23f6
return TRUE;
};
int main (void)
{
g_main_tid = GetCurrentThreadId ();
SetConsoleCtrlHandler ((PHANDLER_ROUTINE)&con_handler, TRUE);
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};
return 0;
}
bj_leo_2000 2007-01-09
  • 打赏
  • 举报
回复
关键是点击关闭按钮或Ctrl+C退出时,没有执行WaitForSingleObject以后的代码就关闭了
kangji 2007-01-09
  • 打赏
  • 举报
回复
WaitForSingleObject之前,再创建一个线程,在线程中根据需要,SetEvent

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧