delphi 一个最简单的线程程序尝试

先贴代码

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TMyThread = class(TThread)
  private
  protected
    procedure Run;
    procedure Execute; override;
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    processing : Boolean;
    MyThread1: TMyThread;
    Mythread2: TMyThread;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyThread.Run;
var
  i, maxnum:Integer;
begin
  for I := 1 to maxnum do
  begin
    Form1.Memo1.Lines.Add(IntToStr(i));
  end;
end;

procedure TMyThread.Execute;
var
  i, maxnum:Integer;
begin
  maxnum := 1000;
  for I := 1 to maxnum do
  begin
    Form1.Memo1.Lines.Add(IntToStr(i));
  end;
  Form1.MyThread1.Terminate;  //关闭线程,如果没有这个步骤,程序将无法关闭。
  Form1.MyThread2.Terminate;  //关闭线程,如果没有这个步骤,程序将无法关闭。
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
  Processing := True;
  MyThread1 := TMyThread.Create(True);  //创建时不启动线程
  MyThread2 := TMyThread.Create(True);  //创建时不启动线程
  MyThread1.FreeOnTerminate := True;  //结束时自动释放
  MyThread2.FreeOnTerminate := True;  //结束时自动释放
  MyThread1.Resume;
  MyThread2.Resume;
end;

end.

解析部分(我学习时遇到的问题)

type
  TMyThread = class(TThread)
  private
  protected
    procedure Run;
    procedure Execute; override;
    { Private declarations }
  public
    { Public declarations }
  end;

这部分我早期学习的时候,会直接把下方的Form1部分的Type替换成这段,其实Type是这两个独立的部分的声明。是并存的,也是应该都存在的。

MyThread1 := TMyThread.Create(True);  //我在其他的地方看到的都是好多参数的创建,试了都好像有问题,也有点没搞明白。(比如:CreateThread(nil, 0, @MyFun, nil, 0, ID); 这个我一直调用没成功,MyFun是一个函数)

Form1.MyThread1.Terminate;  //关闭线程,如果没有这个步骤,程序将无法关闭。

这一句是我发现我使用了线程以后。软件无法正常关闭,发现没有进行关闭线程。

最后是发现了一个问题,不太明白为什么?

最后的233比232更早Add,想不同是为什么 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面给您提供一个简单Delphi程序示例,用于调用Open API获取天气信息: ```delphi uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, System.Net.HttpClientComponent, System.Net.URLClient, System.Net.HttpClient, System.JSON; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); var HttpClient: THttpClient; URL: string; Response: IHTTPResponse; JSONValue: TJSONValue; begin URL := 'https://api.openweathermap.org/data/2.5/weather?q=London&appid=your-api-key'; HttpClient := THttpClient.Create; try Response := HttpClient.Get(URL); if Response.StatusCode = 200 then begin JSONValue := TJSONObject.ParseJSONValue(Response.ContentAsString); Memo1.Lines.Add(JSONValue.GetValue<string>('weather[0].description')); end else Memo1.Lines.Add('Error: ' + Response.StatusCode.ToString); finally HttpClient.Free; end; end; end. ``` 在这个示例中,我们使用了THttpClient组件来创建HTTP客户端,然后使用Get方法向Open API发送请求。如果请求成功,我们将会得到一个JSON字符串,通过解析JSON字符串,我们可以获取到我们需要的信息。在这个例子中,我们获取了伦敦的天气信息,将天气描述显示在Memo控件中。 您需要将示例中的“your-api-key”替换为您自己的API密钥。此外,您还需要在项目文件中添加“System.Net.HttpClientComponent”单元。 这只是一个简单的示例,您可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值