随笔分类 -  delphi之多线程

摘要:转载自:https://www.cnblogs.com/xumenger/p/4701404.html 首先看TThread源码中关于OnTerminate的代码: 1 2 3 4 5 public .... property OnTerminate: TNotifyEvent read FOnTe 阅读全文
posted @ 2019-11-13 19:22 木头侠 阅读(368) 评论(0) 推荐(0)
摘要:转载自https://www.cnblogs.com/xumenger/p/4454115.html 上篇博客中提出了一个问题:怎么结束一个定时循环执行的线程,并给出了一个解决方案,但是又出现了一个问题,详细去参考上一篇博客。 然后出去撒了个尿,突然脑子里出现了一个想法(看来工作和思考久了,出去走走 阅读全文
posted @ 2019-11-13 19:19 木头侠 阅读(354) 评论(0) 推荐(0)
摘要:转载自https://www.cnblogs.com/xumenger/p/4453902.html 在线程对象被释放之前,首先要检查线程是否还在执行中,如果线程还在执行中(线程ID不为0,并且线程结束标志未设置),则调用Terminate 过程结束线程。Terminate 过程只是简单地设置线程类 阅读全文
posted @ 2019-11-13 19:17 木头侠 阅读(941) 评论(0) 推荐(0)
摘要:接着上文介绍TThread。 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与Delphi中的事件有所不同。从本质上讲,Event其实就相当于一个全局的布尔变量。它有两个赋值操作:S 阅读全文
posted @ 2019-11-13 19:15 木头侠 阅读(720) 评论(0) 推荐(0)
摘要:参考:http://www.cnblogs.com/rogee/archive/2010/09/20/1832053.html Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数的Delphi书籍都有讲到,但是基本上都是对TThread类的几个成员作一简单介绍,再说明一个 阅读全文
posted @ 2019-11-13 19:13 木头侠 阅读(397) 评论(0) 推荐(0)
摘要:先说一下RTL和VCL RTL(Run-Time library),运行时库,包括System、SysUtils、Math三个单元,提供的函数与语言、编译器、操作系统及进程有关 RTL提供类之间继承于 TObject 和 RTL内部的类 VCL(Visual Component Library),可 阅读全文
posted @ 2019-11-13 18:23 木头侠 阅读(534) 评论(0) 推荐(0)
摘要:参考http://blog.chinaunix.net/uid-10535208-id-2949323.html 一、概述 Delphi提供了好几种对象以方便进行多线程编程。多线程应用程序有以下几方面的功能: 1.避免性能瓶颈:单线程应用程序在进行比较慢的操作如磁盘读写的时候,CPU必须停下来等待, 阅读全文
posted @ 2019-11-13 18:05 木头侠 阅读(569) 评论(0) 推荐(0)
摘要:当创建了多个线程,并且多个线程都要访问同一资源,,就有可能出现混乱,于是用Synchronize来控制,使同一时间只有一个线程使用那部分资源,Synchronize参数里面的代码就是多线程需要公共的代码!线程是进程内一个相对独立的、可调度的执行单元。一个应用可以有一个主线程,一个主线程可以有多个子线 阅读全文
posted @ 2019-11-06 15:09 木头侠 阅读(526) 评论(0) 推荐(0)
摘要:在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程。 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:http://www.cr173.com/html/16747_1.html 主线程又程为UI线程。 进程和线 阅读全文
posted @ 2019-11-06 15:07 木头侠 阅读(1396) 评论(0) 推荐(0)
摘要:ADO多线程数据库查询通常会出现以下问题: 1、CoInitialize 没有调用(CoInitialize was not called);所以,在使用任何dbGo对象前,必须手 调用CoInitialize和CoUninitialize。调用CoInitialize失败会产生"CoInitial 阅读全文
posted @ 2019-11-06 14:55 木头侠 阅读(1087) 评论(0) 推荐(0)
摘要:先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): {自定义方法: 在窗体上绘制...} procedure MyMethod; var i: Integer; begin for i := 0 to 500000 do begin Form1.Canvas.Lock; Form 阅读全文
posted @ 2019-11-06 14:38 木头侠 阅读(1050) 评论(0) 推荐(0)