【发布时间】:2010-04-07 10:57:12
【问题描述】:
在 C++ 中,控制台应用程序可以在其 Winmain 过程中包含消息处理程序。像这样:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
#ifdef _DEBUG
CreateConsole("Title");
#endif
hwnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(IsDialogMessage(hwnd, &msg))
continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
这使得进程在控制台窗口收到 WM_QUIT 消息之前不会关闭。我不知道如何在delphi中做类似的事情。
我需要的不只是一个消息处理程序,而是一个轻量级的“技巧”,可以让控制台应用程序像使用线程的 GUI 应用程序一样工作。因此,例如,可以在控制台应用程序不终止进程的情况下处理两个 Indy TCP 服务器。
我的问题:如何做到这一点?
【问题讨论】:
-
这不是一个控制台应用程序,它是一个标准的 GUI 应用程序,没有可见的顶级窗口。否则你不需要调用
CreateConsole(),控制台应用程序总是有一个附加到它的控制台。还是您希望在应用运行时空的控制台窗口一直存在? -
我希望空的控制台窗口在应用程序运行时保持不变,但我不希望它终止。我必须将一个 gui 应用程序替换为两个 TCP 服务器和一个以相同方式运行的控制台作为两个 tcp 服务器的 gui(不终止)。
-
如果你真的在写一个 TCP 服务器,那么它可能应该是一个服务,在这种情况下控制台与 gui 是无关紧要的,因为它的 UI 也永远不会被看到方式。
标签: delphi multithreading console delphi-2009 console-application