首页
学习
活动
专区
工具
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-简单的开始 在Delphi的VCL中封装了一个TThread类用于多线程的开发,这样比较符合面向对象的思想,同时又可以提高开发效率,一般的情况下开发都是通过派生这个类来实现多线程。...线程终止 在Delphi的TThread类实现中,可以通过一个Terminate方法来让线程终止。但事实上Terminated只是一个标识而已,在线程启动时这个标识为False。...ThreadProc方法,它是线程创建时传给系统API的回调函数;Delphi中通过这个方法完成了一个核心的功能,可以看到代码中调用了Execute方法。...所以从代码也可以看出,线程启动后代码是顺序执行的,代码走完就结束了,所以为了让线程能够一直在运行就要在Execute方法里加上一个死循环,保证线程一直在运算,直到接收到Terminated时才让线程结束掉

2.3K80

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函数, 通常情况下并不会使用到DLL的MAIN函数,因为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邮箱邮件发送 技术笔记:Indy的TIdSMTP改造,解决发送Html和主题截断问题 技术笔记:Delphi多线程应用读写锁 技术笔记:Indy控件发送邮件 学习笔记:7z在delphi的应用...学习笔记 :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、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

    37020

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

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

    61820

    初探Windows用户态调试机制

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

    75420

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

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

    57820

    sdfsdfsd_dsd cd

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

    2K10

    Kotlin 协程总结

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

    3.3K11

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

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

    1.4K40

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

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

    2K40

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

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

    60430

    Kotlin | 协程是什么?

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

    58710

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

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

    1.1K60

    kotlin 协程入门教程

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

    20810

    经典笔试题-线程篇

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

    80330

    Java面试之线程

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

    21110
    领券