秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
近日和高勇交流中发现,以下代码在delphi能编译及正确执行。
复制代码
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
    TThread.CreateAnonymousThread(
   procedure
   begin
     sleep(3000);
     TThread.Synchronize(TThread.CurrentThread,
     procedure
     begin
        Memo1.Lines.Add('okok');
     end);
   end
   ).Start;
end;

end.
复制代码

但在lazarus 3.0/fpc 3.3.1时出现以下3个问题:
问题一:
编译时出现以下出错提示:

unit1.pas(137,4) Error: Illegal expression
unit1.pas(138,4) Error: Syntax error, ")" expected but "BEGIN" found

解决方法:
在单元最前面添加:
{$mode delphi}

{$mode DELPHI}{$H+}
unit Unit1;

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,LConvEncoding,

 

问题二:当加上{$mode delphi}后,编译时又出现另一错误:

unit1.pas(144,4) Error: Internal error 2022011001

这个提示“Error: Internal error 2022011001”没明确是那行编写有问题,最后发现是线程里Memo1.Lines.Add('okok')不能直接添加字符串,只能以变量添加才能通过编译。

复制代码
procedure TForm1.Button4Click(Sender: TObject);
var i:integer;
  s:string;
begin
    TThread.CreateAnonymousThread(
   procedure
   begin
     sleep(3000);
     TThread.Synchronize(TThread.CurrentThread,
     procedure
     begin
       s:='okok';
       Memo1.Lines.Add(s);
     end);
   end
   ).Start;
end;
复制代码

 
问题三:以上代码编译后在Windows能显示线程添加的信息,但linux可能不显示添加的信息。
我测试的结果是:在linux和windows都能显示添加的信息,但高勇的不能显示,最后发现在memo1.Lines.add(s)加上单元名就可以,如出现类似这情况,建议加上单元名称。
以下代码在windows和linux都能正确执行。

复制代码
procedure TForm1.Button4Click(Sender: TObject);
var i:integer;
  s:string;
begin
    TThread.CreateAnonymousThread(
   procedure
   begin
     sleep(3000);
     TThread.Synchronize(TThread.CurrentThread,
     procedure
     begin
       s:='okok';
       Form1.Memo1.Lines.Add(s);
     end);
   end
   ).Start;
end;
复制代码

 

posted on   秋·风  阅读(660)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示