首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在delphi 2007中启动挂起线程的正确方法是什么?

在Delphi 2007中启动挂起线程的正确方法是使用TThread类。以下是一个简单的示例:

代码语言:delphi
复制
unit MainForm;

interface

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

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

  TForm1 = class(TForm)
    btnStartThread: TButton;
    procedure btnStartThreadClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMyThread }

procedure TMyThread.Execute;
begin
  // 在这里编写线程的代码
end;

{ TForm1 }

procedure TForm1.btnStartThreadClick(Sender: TObject);
var
  MyThread: TMyThread;
begin
  MyThread := TMyThread.Create(True); // 创建线程
  MyThread.FreeOnTerminate := True; // 当线程终止时释放线程对象
  MyThread.Start; // 启动线程
end;

end.

在这个示例中,我们创建了一个名为TMyThread的线程类,该类继承自TThread。我们覆盖了Execute方法,以在线程中执行我们的代码。然后,在主表单中,我们创建了一个按钮,当单击该按钮时,将创建并启动线程。

请注意,在Delphi 2007中,线程的创建方式可能与较新版本的Delphi略有不同。如果您使用的是较新版本的Delphi,请参阅相应的文档以获取更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

学习笔记: Delphi线程类TThread

但是实际开发过程中还是发现了许多问题,比如挂起与终止概念都没有弄明白,导致浪费许多时间。...TThread-简单开始 DelphiVCL中封装了一个TThread类用于多线程开发,这样比较符合面向对象思想,同时又可以提高开发效率,一般情况下开发都是通过派生这个类来实现多线程。...线程终止 DelphiTThread类实现中,可以通过一个Terminate方法来让线程终止。但事实上Terminated只是一个标识而已,在线程启动时这个标识为False。...ThreadProc方法,它是线程创建时传给系统API回调函数;Delphi中通过这个方法完成了一个核心功能,可以看到代码中调用了Execute方法。...所以从代码也可以看出,线程启动后代码是顺序执行,代码走完就结束了,所以为了让线程能够一直在运行就要在Execute方法里加上一个死循环,保证线程一直在运算,直到接收到Terminated时才让线程结束掉

2.2K80

C++ CreateThread使用

CreateThread 倒数第二个参数 dwCreationFlags(启动选项) 有两个可选值: 0: 线程建立后立即执行入口函数; CREATE_SUSPENDED: 线程建立后会挂起等待...ResumeThread 恢复线程运行; SuspendThread 挂起线程. 这两个函数参数都是线程句柄, 返回值是执行前挂起计数. 什么是挂起计数?..., 这个函数标准返回值应该是 DWORD, 不过这函数 Delphi System 单元定义是: TThreadFunc = function(Parameter: Pointer): Integer...尽管可以用 Addr(类名.方法名) 或 MethodAddress('published 区方法名') 获取类中方法地址, 但都不能当做线程入口函数, 原因可能是因为类中方法地址是实例化为对象时动态分配...为解决这个问题 Delphi 为我们提供了一个类似 var ThreadVar 关键字, 线程使用 ThreadVar 声明全局变量时会在各自栈中留一个副本, 这样就解决了冲突.

1.2K30
  • 如何解决DLL入口函数中创建或结束线程时卡死

    先看一下使用Delphi开发DLL时如何使用MAIN函数, 通常情况下并不会使用到DLLMAIN函数,因为delphi框架已经把Main函数隐藏起来 而工程函数 begin end 默认就是MAIN...,任何启动线程都会由于LdrLoadDll中LdrpLoaderLock 进入锁定状态而处于等待,无法进入线程函数,所以也就永远无法检测到正式执行机会。...另外有一个特殊现象,就是DLL_PROCESS_DETACH事件中,线程处于挂起状态,这是因为系统分配线程执行时间片过程中由于PE Loader有资源处于锁定而导致线程无法进行下一个时间片,最终表现为线程函数处于假死状态...,此状态基本上等同于线程挂起(suspend)状态。...注: 此问题是属于系统多线程处理问题,或者说是属于Windows API使用方法问题,使用其他VB VC等开发的人员也可以参考此解决方法

    3.8K10

    博客目录及索引,欢迎指导交流

    Apache Ignite高性能分布式网格框架-初探 openfire Openfire上弄一个简单推送系统 Openfire启动过程与session管理 Openfire集群源码分析 openfire...支持腾讯QQ邮箱邮件发送 技术笔记:IndyTIdSMTP改造,解决发送Html和主题截断问题 技术笔记:Delphi线程应用读写锁 技术笔记:Indy控件发送邮件 学习笔记:7zdelphi应用...学习笔记 :DrawText 学习笔记:delphi之TStringGrid 学习笔记: Delphi线程类TThread 学习笔记:delphi线程知识 WEB开发相关 Http状态码之:301...、302重定向 学点HTTP知识 学习笔记:URL Protocol浏览器中打开本地应用程序 学习笔记:发现一个IE版本判断方法 使用js在网页上记录鼠标划圈小程序 其他 学习笔记:内存,堆栈,...基于 Asp.Net Comet 技术解析 LinqToSql开发实践之认识LinqToSql 如何正确看待手机续航 钉钉开放平台demo调试异常问题解决:hostname in certificate

    1.7K90

    Java基础面试题3

    答:Clone 有缺省行为,super.clone();他负责产生正确大小空间,并逐位复制。 57、JAVA中,如何跳出当前多重嵌套循环? 答:用break; return 方法。...若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 61、sleep() 和 wait() 有什么区别?...63、启动一个线程是用run()还是start()?答:启动一个线程是调用start()方法,使线程所代表虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。...notify():唤醒一个处于等待状态线程,注意调用此方法时候,并不能确切唤醒某一个等待状态线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。...Allnotity():唤醒所有处入等待状态线程,注意并不是给所有唤醒线程一个对象锁,而是让它们竞争。 66、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

    36820

    Java面试知识点总结(牛客网)

    新      →  就绪/挂起:新进程创建后若无足够内存分配,则插入到就绪/挂起队列。 14. 同步方法和同步代码块区别是什么? 为何使用同步?...JVM堆是运行时数据区,所有类实例和数组都是堆上分配内存。它在JVM启动时候被创建。对象所占堆内存是由自动内存管理系统也就是垃圾收集器回收。  堆内存是由存活和死亡对象组成。...安全管理器启动时候被创建,之后不能被替换覆盖或者是扩展。 65. 弹出式选择菜单(Choice)和列表(List)有什么区别? Choice是以一种紧凑形式展示,需要下拉才能看到所有的选项。...可以应用服务器启动时候建立很多个数据库连接并维护一个池中。连接请求由池中连接提供。连接使用完毕以后,把连接归还到池中,以用于满足将来更多请求。 72. 让RMI程序能正确运行有哪些步骤?...为了让RMI程序能正确运行必须要包含以下几个步骤:  编译所有的源文件。  使用rmic生成stub。  启动rmiregistry。  启动RMI服务器。  运行客户端程序。 73.

    61220

    初探Windows用户态调试机制

    //注意:Delphi调试器里会卡在这个地方,非调试环境下没有问题。...调试器开始调试时候,会启动被调试程序新进程或者挂接(attach)到一个已运行进程上,此时Win32系统会启动调试接口服务器端;然后调试器调用WaitForDebugEvent函数等待调试服务器端调试事件被引发...游戏保护其中一种保护手段就是通过不断抹除DebugPort,从而达到反调试目的,所以我们发现用OD无法附加游戏,当然我们可以通过端口移位方法绕过这种保护方法,这里暂且不做讨论。...当我们调用CreateThread函数时,函数建立了线程必要内核对象和数据结构,做了必要登记后,最终会调用PspUserthreadStartup函数,准备启动该线 程。...处理调试事件过程中,被调试进程时处于挂起状态。处理调试事件后,调试器调用ContinueDebugEvent将处理结果回复给调试子系统。

    75320

    Java程序员面试题大全系列之Java基础类库(一)

    java.io 包中还有许多其他流,低层流与调层流,高层流主要是为了提高性能和使用方便。 2、启动一个线程是用 run()还是 start()?...启动一个线程是调用 start()方法启动线程并调用 run 方法。 3、线程基本概念、线程基本状态以及状态之间关系 线程是进程内并发,没有自已内存空间,共享进程线程通信成本较低。...Java 中线程有四种状态分别是:运行、就绪、挂起、结束。 4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法?...调用 suspend()时候,目标线程会停下来,但却仍然持有在这之前获得锁定。此时,其他任何线程都不能访问锁定资源,除非被"挂起"线程恢复运行。...若标志指出线程应该挂起,便用 wait()命其进入等待状态。若标志指出线程应当恢复,则用一个 notify()重新启动线程。 5、集合框架有什么?

    57720

    sdfsdfsd_dsd cd

    1)—为DataSnap系统服务程序添加描述 这几天一直研究Delphi 2010DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了。...大家可以另开线程来监控客户端连接,但是今天要给大家讲解不是这个方法,而是使用TCP协议自带心跳包功能解决这个问题。...解决办法是客户端传入用户名和密码,如果用户名和密码不正确,连接将被挂断。 客户端SQLConnection1中driver分类username和password属性设置好用户名和密码。...Session 说明:这是delphi2010中默认属性,也是delphi推荐设置。Session会为每个来自客户端链接,建立一个线程来实例化。实例化是什么概念呢?...所以要自己控制客户端并发调用问题(可以使用互斥、原子量等方法),让客户端调用排成一队使用服务器资源。 适用环境:这个设置不是线程安全!!

    2K10

    Java并发编程:多线程如何实现阻塞与唤醒

    线程阻塞和唤醒线程并发过程中是一个关键点,当线程数量达到很大数量级时,并发可能带来很多隐蔽问题。如何正确暂停一个线程,暂停后又如何在一个要求时间点恢复,这些都需要仔细考虑细节。...02 挂起与恢复 Java发展史上曾经使用suspend()、resume()方法对于线程进行阻塞唤醒,它能够代码中控制阻塞和唤醒时间节点,比起sleep()方法更加灵活。...比如线程启动某个时间点需要让它挂起,这可以使用suspend方法,而当要重新唤醒它时则使用resume方法。 ?...如下代码,主要逻辑代码是主线程启动线程mt一段时间后尝试使用suspend()让线程挂起,最后通过resume()恢复线程。...其实问题根源隐藏得较深,主线程启动线程mt后,线程mt开始执行execute()方法,不断打印字符串。

    1.3K40

    Kotlin 协程总结

    这里api.getUser是一个挂起函数,所以能够保证nameTv.text正确赋值,这就涉及到了协程中最著名「非阻塞式挂起」。这个名词看起来不是那么容易理解,后面会讲。...4.小结 协程是一种编程思想,写法简洁,可以通过Dispatchers调度器切换到指定线程。所有代码都是运行在线程,协程也是。 二、挂起是什么 1....「挂起本质 协程中「挂起对象到底是什么挂起线程,还是挂起函数?都不对,我们挂起对象是协程。...紧接着 suspend 函数执行完成之后,协程为我们做最爽事就来了:会自动帮我们把线程再切回来。 这个「切回来」是什么意思?...挂起操作 —— 也就是切线程,依赖挂起函数里面的实际代码,而不是这个关键字。 所以这个关键字,只是一个提醒。 还记得刚才我们尝试自定义挂起函数方法吗?

    3.2K11

    Kotlin协程解析系列(上):协程调度与挂起

    使用和分析协程前,首先要了解一下: 协程是什么? 为什么需要协程? 协程最为人称道就是可以用看起来同步方式写出异步代码,极大提高了代码可读性。实际开发中最常见异步操作莫过于网络请求。...除此之外,也包括携带参数,拦截协程执行等,是实现正确线程行为、生命周期、异常以及调试关键。...: 首先在协程进行启动时候通过拦截器方式进行拦截,对应方法是interceptContinuation 然后返回一个具有切换线程功能Continuation 每次进行resumeWith时候...图片 五、协程挂起 在前述协程时,经常会出现suspend关键字和挂起说法,其含义和用法是什么?一起深入看一下。...协程挂起并不会阻塞线程,因为协程挂起时相当于执行完协程方法线程继续执行其他之后逻辑。

    1.9K40

    Java面试系列16-jdbc、hibernate、流、线程实现、多态、继承事程序执行顺序等

    调用suspend()时候,目标线程会停下来,但却仍然持有在这之前获得锁定。 此时,其他任何线程都不能访问锁定资源,除非被"挂起"线程恢复运行。...对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定资 源,就会造成死锁。 所以不应该使用suspend(),而应在自己Thread类中置入一个标志,指出线程应该活动还是挂起。...若标志指出线程应该挂起, 便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 3 java中有几种类型流?...java.io包中还有许多其他流,主要是为了提高性能和使用方便。 4 java中实现多态机制是什么方法重写Overriding和重载Overloading是Java多态性不同表现。...故 C 正确    4.答案为C、E

    60030

    Kotlin | 协程是什么

    ,是不是很舒服,看起来同步方式内部却是异步操作。...那上面注释中 挂起 是什么意思呢? 什么是挂起? 观察上面的打印日志,我们不难发现,调用 delay 函数时,线程并没有停下,相对来说,只是我们协程代码块被挂起,等待恢复。...所谓非阻塞,其实就是切换了线程,观察打印日志变化,我们可以发现,当我们直接 GlobalScope.launch 启动一个协程时,此时运行线程为默认线程,所以协程被称为非阻塞实现方式。...继续看截图 挂起函数为什么只能在挂起函数中使用呢?? 我们再继续往下看:看一下java字节码 这个 Continuation是什么呢?按照字面意思,意思为延续。那我们该怎么理解呢?...,也就是代码从这里停止,等待计算出结果,然而此时内部线程却没有停止,当计算完时候,也就是挂起结束,此时接着执行我们打印语句。

    57910

    Java 并发编程:多线程如何实现阻塞与唤醒

    线程阻塞和唤醒线程并发过程中是一个关键点,当线程数量达到很大数量级时,并发可能带来很多隐蔽问题。如何正确暂停一个线程,暂停后又如何在一个要求时间点恢复,这些都需要仔细考虑细节。...挂起与恢复 Java发展史上曾经使用suspend()、resume()方法对于线程进行阻塞唤醒,它能够代码中控制阻塞和唤醒时间节点,比起sleep()方法更加灵活。...比如线程启动某个时间点需要让它挂起,这可以使用suspend方法,而当要重新唤醒它时则使用resume方法。...乍一看感觉一点问题都没有,线程任务仅仅只是简单地打印字符串。其实问题根源隐藏得较深,主线程启动线程mt后,线程mt开始执行execute()方法,不断打印字符串。...而suspend()方法挂起线程但并不释放锁,在线程mt被挂起后主线程调用System.out.println同样需要获取System类ut对象同步锁才能打印“can you get here?”。

    1K60

    kotlin 协程入门教程

    链接:https://juejin.cn/post/7370994785655767067 本文由作者授权发布 协程是什么 广义定义上,协程(Coroutine)是指相互协作程序。...因此很多文章介绍 kotlin 协程时,经常会把协程比作轻量级Java线程。...协程相对java线程优势是什么 其实 kotlin 协程核心优势有三个,分别是:轻量、挂起函数以及结构化并发。轻量 ,很多文章都说过,这里不多介绍。...runBlocking 则是一个顶层方法,它可以获取协程执行结果,但这种方式会阻塞代码执行流程,因此只建议测试中使用。上面的代码示例是使用 launch 来创建协程。...挂起函数 挂起函数是指方法声明前加上 suspend 关键字函数。它作用主要是挂起与恢复。其实说挂起和恢复比较难理解,其实简单挂起就是协程任务从当前线程脱离,恢复则是协程任务回到了原线程

    19710

    经典笔试题-线程

    异常;notify():唤醒一个处于等待状态线程,注意调用此方法时候,并不能确切唤醒某一个等待状态线程,而是由JVM 确定唤醒哪个线程,而且不是按优先级; notityAll():唤醒所有处入等待状态线程...84、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?...当应用程序在对象上调用了一个需要花费很长时间来执行方法,并且不希望让程序等待方法返回时,就应该使用异步编程,很多情况下采用异步途径往往更有效率。...86、启动一个线程是用run()还是start()?【基础】 答:启动一个线程是调用start()方法,使线程所代表虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行。...若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程

    80330

    Java面试之线程

    异常;notify():唤醒一个处于等待状态线程,注意调用此方法时候,并不能确切唤醒某一个等待状态线程,而是由JVM 确定唤醒哪个线程,而且不是按优先级; notityAll():唤醒所有处入等待状态线程...4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?...当应用程序在对象上调用了一个需要花费很长时间来执行方法,并且不希望让程序等待方法返回时,就应该使用异步编程,很多情况下采用异步途径往往更有效率。...6、启动一个线程是用run()还是start()?【基础】 答:启动一个线程是调用start()方法,使线程所代表虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行。...若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程

    20810

    恶意代码分析实战六:熊猫烧香病毒样本分析

    正常我们分析一个未知恶意程序时候,流程都是要先上传杀毒网看看。 用PEID进行查壳,显示未加壳,程序采用Delphi语言开发。 补充下Dephi开发程序和C++开发程序一些区别。...区别: 1.Delphi函数调用时参数传递不完全用栈,主要用寄存器。 2.而C++程序函数调用前会使用push语句将参数入栈,然后再进行call。...接着我们来看看RegDeleteValue: 可见恶意程序会将当时几乎所有的安全类工具启动项都给删除。...: 图中我们可以看到两处地方都有个edx寄存器赋值,我们之前说过Delphi程序用寄存器来传参数,所以这里eax和edx都是call参数,我们下面来仔细看看是什么数据给了edx。...它可以将符号表(Map)文件导出,便于我们OD中载入符号表进行调试。 显示出了Delphi符号,便于分析和调试。

    3.3K20
    领券