delphi多线程参数传递问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi多线程参数传递问题相关的知识,希望对你有一定的参考价值。

我用delphi作了个PING函数,我想将Ping函数作成子线程,用这个Ping子线程定时与我网络其它机器进行Ping测试,哪个机器不通时,就告警,但不知道如何将IP地址传线子线程PIng,请高手指教,多谢!

参考技术A type
pingThread=class(TThread)
protected
procedure execute; override;
end;
TForm1 = class(TForm)
edIp: TEdit;
Memo1: TMemo;
Timer1: TTimer;
procedure edIpChange(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
pThread:pingThread;
procedure pThreadDone(sender:TObject);
Private declarations
end;

implementation

$R *.dfm
procedure pingThread.Execute;
var
ip:string;
begin
FreeOnTerminate:=true;
ip:=form1.edIp.Text;
//调用你的ping函数
//ping(htonl(ip));

end;
procedure TForm1.pThreadDone(sender: TObject);
begin
memo1.lines.clear;
memo1.lines.add(edip.text+'unreachable.');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
pThread.Create(false);
pThread.OnTerminate:=pThreadDone;
end;本回答被提问者采纳
参考技术B 建议给Thread类写一个property IP:String;
这样先把参数填好之后再启用其Excute

C# 多线程传递多个参数

http://www.cnblogs.com/lvdongjie/p/5416883.html

3. 方式三:采用lambda表达式

对于lambda表达式不熟悉的可以查看微软MSDN上的说明文档。此处假设你熟悉。因为在大多数使用委托的时候我们一般也可以用lambda表达式的。

 View Code
using System;
 using System.Threading;
  
 namespace ThreadWithParameters
 {
     class Program
     {
         static void Main(string[] args)
         {
             string hello = "hello world";
  
             //如果写成Thread thread = new Thread(ThreadMainWithParameters(hello));这种形式,编译时就会报错
             Thread thread = new Thread(() => ThreadMainWithParameters(hello));
             thread.Start();
  
             Console.Read();
         }
  
         static void ThreadMainWithParameters(string str)
         {
              Console.WriteLine("Running in a thread,received: {0}", str);
         }
     }
 }


以上是关于delphi多线程参数传递问题的主要内容,如果未能解决你的问题,请参考以下文章

在delphi中窗体间怎么传递参数

delphi的一些语法知识 以及参数传递问题,按引用方式传递参数,按值方式传递参数

Delphi怎样实现多线程

C# 多线程参数传递

Delphi 11:常量对象不能作为 var 参数传递

如何向线程传递参数