gpt4 book ai didi

delphi - 添加了 {APPTYPE CONSOLE} 指令,现在我的应用程序运行速度非常慢。移动鼠标使其运行速度更快

转载 作者:行者123 更新时间:2023-12-03 15:44:12 25 4
gpt4 key购买 nike

我正在尝试扩展第 3 方应用程序,以便除了使用 Windows 窗体 GUI(需要混合模式)之外,还可以通过命令行调用它。这是一个相当简单的程序,基本上加载一个文件,然后单击一个按钮,它开始发送 UDP 网络数据包。

我需要从另一个应用程序调用该应用程序,并且希望传递一个参数,并且需要能够将 ExitCode 返回给调用应用程序。根据我的阅读,为了做到这一点,您需要添加编译器指令 {APPTYPE CONSOLE}。

我这样做了,我的应用程序按照我想要的方式工作,除了发送网络数据包的速度减慢了。 我发现每当我在表单上移动鼠标时都会出现这种情况。表明网络传输速率显着提高。我怀疑存在某种类型的 Windows 消息队列问题,并且移动鼠标导致中断,进而导致消息队列被处理?

我用谷歌搜索了一下,并尝试在计时器中以 1 毫秒的间隔调用 Application.ProcessMessages 和 PeekMessages,但这根本没有帮助。我在这个user manual for some other application中找到了它说 APPTYPE CONSOLE 和 GUI 类型都支持 Indy 10。坦率地说,这让我感到困惑,因为我认为所有网络库都可以在两种模式下工作......但就像我说的,我不熟悉 Delphi。

我确信问题仅限于我的应用程序中的一行,即是否包含 {APPTYPE CONSOLE}。

大家有什么想法吗?

版本信息:
Delphi 7 个人版(内部版本 4.453)
印地9.0.4

最佳答案

如果您将 {APPTYPE CONSOLE} 添加到您的应用程序,即使您希望混合模式执行,那么即使应用程序处于 GUI 模式,您也必须使用控制台。您当然可以关闭控制台,但这会导致一些闪烁,对我来说有点黑客行为。

您应该能够在没有控制台程序的情况下做您想做的事情。一个小测试程序证明退出代码可以从 GUI 程序中读取:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ExitCode := 42;
Timer1.Interval := 1000;
Timer1.Enabled := TRUE;
end;

如果使用以下cmd文件执行:

@echo off
start /WAIT project1.exe
echo %ERRORLEVEL%

程序显示其主窗体 1 秒,然后关闭,脚本将 42 打印到控制台窗口。

现在捕获输出 - 如果允许使用临时文件,从 GUI 程序执行此操作实际上比从控制台程序执行此操作更容易。无论如何,您都需要使用命令行参数来启动程序,那么为什么不给它一个临时文件的名称,等待应用程序完成,读入该文件,然后将其删除呢?

关于delphi - 添加了 {APPTYPE CONSOLE} 指令,现在我的应用程序运行速度非常慢。移动鼠标使其运行速度更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com