delphi下载文件多线程(求DELPHI多线程例程 快进来看看)

2024-07-28 13:46:47 4

delphi下载文件多线程(求DELPHI多线程例程   快进来看看)

“delphi下载文件多线程”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看delphi下载文件多线程(求DELPHI多线程例程 快进来看看)!

本文目录

求DELPHI多线程例程 快进来看看

优秀的数据库应用应当充分考虑数据库访问的速度问题。通常可以通过优化数据库、优化 查询语句、分页查询等途径收到明显的效果。即使是这样,也不可避免地会在查询时闪现一个带有 SQL符号的沙漏,即鼠标变成了查询等待。最可怜的是用户,他(她)在此时只能无奈地等待。遇到急性子的,干脆在此时尝试 Windows中的其它应用程序,结果致使你的数据库应用显示一大片白色的窗口。真是无奈! 本文将以简单的例子告诉你如何实现线程查询。还等什么,赶快打开Delphi对照着下面的完整源代码试试吧。 在查询时能够做别的事情或者取消查询,这只是基本的线程查询,在你阅读了Delphi有关线程帮助之后能立刻实现。这里介绍的是多个线程查询的同步进行。 在Delphi数据库应用中,都有一个缺省的数据库会话 Session。通常情况下,每个数据库应用中只有这一个会话。无论是查询函数修改数据,在同一时间内只能进行其中的一件事情, 而且进行这一件事情的时候应用程序不能响应键盘、鼠标以及其它的 Windows消息。这就是在 窗口区域会显示一片空白的原因所在。当然,只要将查询或数据操纵构造成线程对象,情况会好一些,至少可以接受窗口消息,也可以随时终止查询或数据操纵,而不会在屏幕上显示出太难看的白色。不过,这只是解决了问题的一部分。假如在进行一个线程查询的时候,用户通过 按钮或菜单又发出了另一个查询的命令,这可如何是好,难道终止正在执行的数据库访问吗? 解决之道就是:多线程同步查询。 实现多线程同步查询的基本思想是,为每一个查询组件(如TQuery组件)创建一个独占的 数据库会话,然后各自进行数据库访问。需要特别注意的是,因为Delphi中的 VCL组件大多都 不是线程安全的,所以应当在线程查询结束后再将DataSource组件与查询组件关联,从而显示 在DBGrid组件中。 下面的例子只实现了静态的线程同步查询,即线程对象是固定的,并随窗体的创建和销毁 而创建和销毁。你可以就此进行改进,为每一个数据查询或数据操纵命令创建一个单独的线程对象,从而达到多线程同步查询的目的。 注意:应用程序中的线程不是越多越好,因为线程将严重吞噬CPU资源,尽管看上去并不明显。谨慎创建和销毁线程将避免你的应用程序导致系统资源崩溃。 下面的例子给出了同时进行的两个线程查询。第一次按下按钮时,线程开始执行;以后每次按下按钮时,如果线程处于挂起状态则继续执行,否则挂起线程;线程执行完毕之后将连接 DataSource,查询结果将显示在相应的DBGrid中。 { 这里的多线程同步查询演示程序仅包括一个工程文件和一个单元文件 } { 窗体中放置的组件有: } { 两个Session组件 } { 两个Database组件 } { 两个Query组件 } { 两个DataSource组件 } { 两个DBGrid组件 } { 一个Button组件 } { 除非特别说明,否则上述各组件的属性都取默认值(见各组件注释) } { 对于Database组件,就和一般设置一样,有一个正确的连接即可 } { 对于Query 组件,需要在各自的属性 SQL中添加一些查询语句,为了 } { 看得更清除,建议不要在两个Query 组件中填写相同的查询语句。 } unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls; type TForm1 = class(TForm) Session1: TSession; { 属性SessionName填写为S1 } Database1: TDatabase; { 属性SessionName选择为S1 } Query1: TQuery;{ 属性Database选择为Database1;属性SessionName选择为S1 } DataSource1: TDataSource; { 属性DataSet设置为空 } DBGrid1: TDBGrid; { 属性DataSource选择为DataSource1 } Session2: TSession; { 属性SessionName填写为S2 } Database2: TDatabase; { 属性SessionName选择为S2 } Query2: TQuery;{ 属性Database选择为Database2;属性SessionName选择为S2 } DataSource2: TDataSource; { 属性DataSet设置为空 } DBGrid2: TDBGrid; { 属性DataSource选择为DataSource2 } BtnGoPause: TButton; { 用于执行和挂起线程 } procedure FormCreate(Sender: TObject); { 创建窗体时创建线程对象 } procedure FormDestroy(Sender: TObject); { 销毁窗体时销毁线程对象 } procedure BtnGoPauseClick(Sender: TObject); { 执行线程和挂起线程 } private public end; TThreadQuery = class(TThread) { 声明线程类 } private FQuery: TQuery; { 线程中的查询组件 } FDataSource: TDataSource; { 与查询组件相关的数据感知组件 } procedure ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 } protected procedure Execute; override;{ 执行线程的方法 } public constructor Create(Query: TQuery; DataSource: TDataSource); virtual; { 线程构造器 } end; var Form1: TForm1; Q1, { 线程查询对象1 } Q2: TThreadQuery; { 线程查询对象2 } implementation {$R *.DFM} { TThreadQuery类的实现 } { 连接数据查询组件和数据感知组件} procedure TThreadQuery.ConnectDataSource; begin FDataSource.DataSet := FQuery;{ 该方法在查询结束后才调用 } end; procedure TThreadQuery.Execute;{ 执行线程的方法 } begin try FQuery.Open; { 打开查询 } Synchronize(ConnectDataSource);{ 线程同步 } except ShowMessage(’Query Error’); { 线程异常 } end; end; { 线程查询类的构造器 } constructor TThreadQuery.Create(Query: TQuery; DataSource: TDataSource); begin FQuery := Query; FDataSource := DataSource; inherited Create(True); FreeOnTerminate := False; end; { 创建窗体时创建线程查询对象 } procedure TForm1.FormCreate(Sender: TObject); begin Q1 := TThreadQuery.Create(Query1, DataSource1); Q2 := TThreadQuery.Create(Query2, DataSource2); end; { 销毁窗体时销毁线程查询对象 } procedure TForm1.FormDestroy(Sender: TObject); begin Q1.Terminate; { 销毁之前终止线程执行 } Q1.Destroy; Q2.Terminate; { 销毁之前终止线程执行 } Q2.Destroy; end; { 开始线程、继续执行线程、挂起线程 } procedure TForm1.BtnGoPauseClick(Sender: TObject); begin if Q1.Suspended then Q1.Resume else Q1.Suspend; if Q2.Suspended then Q2.Resume else Q2.Suspend; end; end.

Delphi多线程问题

{注意哦,你的两个线程用的同一个变量装它们的句柄,这样是不对地,出错地原因是因为循环操作可视控件的时候,如果不排队,会出现同时访问的情况,最好是可以使用类的方式来使用线程}unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); // procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; hloopHandle:Thandle ; //线程 句柄 dloopThreadID:DWORD ; //线程 id //================ lpHandles:Thandle; lpTheradID:DWORD; function doloop(P:pointer):Longint;stdcall; Function StartEvent(S:pointer):Longint;stdcall;implementation{$R *.dfm}//按钮一procedure TForm1.Button1Click(Sender: TObject);begin hloopHandle:= CreateThread(nil,0,@doloop,nil,0,dloopThreadID); if hloopHandle=0 then begin messagebox(Handle,’Didn’t Create a Thread’,nil,MB_OK); abort; end;end;//按钮二procedure TForm1.Button2Click(Sender: TObject);begin lpHandles:= CreateThread(nil,0,@StartEvent,nil,0,lpTheradID); if lpHandles=0 then begin messagebox(Handle,’Didn’t Create a Thread’,nil,MB_OK); abort; end;end;//线程处理函数一function doloop(P:pointer):integer;stdcall;var i:integer;begin for i:=0 to 100000 do begin form1.Edit1.Text:=inttostr(i); sleep(100); end;end;//==================================//线程处理函数二Function StartEvent(S:pointer):integer;stdcall;var c:integer; begin for c:=0 to 100000 do begin form1.Edit2.Text:=inttostr(c); sleep(100); end; end;end.

delphi的P2P技术

作为一种技术就不限定某种语言。所以用delphi和其他的一样,需要学习网络编程:传递文件数据;多线程:多个peer端同时下载;临界区,共享数据访问,锁问题;数据结构:数据发送接收的格式,管理接收到的数据,还原文件

delphi多线程问题

我是这么做的:启动一个主线程,主线程用来分配线程任务、管理线程列表。先定义一个子线程数组,例如array of tthread,主线程不停循环(直至任务列表为空),循环中检查子线程数组里面线程的状态,一旦发现结束就立即分配给他任务,resum。

Delphi多线程怎么处理

给你一个简单的参考代码:delphi线程的创建、挂起、激活与终止proceduretform1.button1click(sender:tobject);begin//创建线程,同时线程函数被调用hthread:=createthread(nil,0,@mythreadfunc,nil,0,threadid);end;proceduretform1.button2click(sender:tobject);beginsuspendthread(hthread);//挂起线程end;proceduretform1.button3click(sender:tobject);beginresumethread(hthread);//激活线程end;proceduretform1.button4click(sender:tobject);beginterminatethread(hthread,0);// 终止线程end;

DELPHI怎么实现多线程 在线等

  unit bncthrd;  interface  uses  winprocs,classes,graphics,extctrls;  type  tbouncethread=class(tthread)  private  fshape:tshape;  fxspeed:integer;  fyspeed:integer;  procedure moveshape;  protected  procedure execute;override;  public  constructor create(suspended:boolean;shape:tshape;xspeed,yspeed:integer);  propertyshape:tshapereadfshape;  end;  implementation  procedure tbouad.moveshape;  var  maxheight,maxwidth:integer;  begin  with fshape do  begin  left:=left+fxspeed;  top:=top+fyspeed;  if(left=0) or(left+width=parent.width)then  fxspeed:=fxspeed*-1;  if(top=0)or(top=height+parent.height)then  fyspeed:=fyspeed*-1;  end;  end;  procedure tbouncethread.execute;  begin  while not terminated do  begin  synchronize(moveshape);  end;  end;  constructor tbouncethread.create(suspended:boolean;shape:tshape;  xspeed,yspeed:integer);  begin  inherited create(suspended);  fshape:=shape;  fxspeed:=xspeed;{x轴走向的速度}  fyspeed:=yspeed;{y轴走向的速度}  freeonterminate:=true;  end;  end.  执行时我们可以新建一个程序,然后在uses部分加入以上的bncthrd单元,再在它的窗体form1上加入两个shape控件shape1和shape2,shape1可以是一个矩形而shape2  是一个圆。加入以下的代码就可以让矩形和圆动起来。  unit Unit1;  interface  uses  bncthrd,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;  type  TForm1 = class(TForm)  Shape1: TShape;  Shape2: TShape;  Button1: TButton;  procedure Button1Click(Sender: TObject);  private  { Private declarations }  public  { Public declarations }  end;  var  Form1: TForm1;  implementation  {$R *.DFM}  procedure TForm1.Button1Click(Sender: TObject);  begin  tbouncethread.create(false,shape1,1,2);  tbouncethread.create(false,shape2,2,3);  end;  end.

delphi 多线程编程问题

多线程中使用方法注意以下几点就可以了!1.在更新VCL控件的时候使用Synchronize.2.如果线程内定义了全局变量,如果想修改它的话,一般常用临界,如果是多进程方式同步的话使用互斥等....3.你所说的使用synchonrize和不使用synchronize结果一样,没有什么区别.!这是在单个线程中没有发现问题,如果多个线程同时运行此段代码就会出现内存写入和读取错误了!

OK,关于delphi下载文件多线程和求DELPHI多线程例程 快进来看看的内容到此结束了,希望对大家有所帮助。

delphi下载文件多线程(求DELPHI多线程例程   快进来看看)

本文编辑:admin

更多文章:


mysql需要安装所有的吗(局域网内多用户连接Mysql数据库,需要每个客户端上都安装Mysql吗)

mysql需要安装所有的吗(局域网内多用户连接Mysql数据库,需要每个客户端上都安装Mysql吗)

本文目录局域网内多用户连接Mysql数据库,需要每个客户端上都安装Mysql吗你好,请问mysql需要安装吗,求助,据说C#使用MySql不需要安装任何东西只局域网内多用户连接Mysql数据库,需要每个客户端上都安装Mysql吗不用 可以一

2024年7月14日 05:06

数据结构与算法题目(数据结构与算法判断题)

数据结构与算法题目(数据结构与算法判断题)

本文目录数据结构与算法判断题数据结构与算法,C/C++ Rescue the princess(拯救公主)算法与数据结构试题 急用!!!数据结构与算法判断题1、错。存储结构才依赖计算机2、正确3、正确4、错。链式存储的插入删除效率高5、错。

2024年3月7日 16:45

彩色字体怎么弄(word怎么制作彩色文字效果呢)

彩色字体怎么弄(word怎么制作彩色文字效果呢)

本文目录word怎么制作彩色文字效果呢ppt怎样作彩色字体彩色字体教程抖音彩色字体怎么弄彩色字体怎么弄微信彩色字体怎么设置word怎么制作彩色文字效果呢1、新建一个word文档,打开后输入“文档”两个字,选中,在菜单栏【开始】中点击文字大小

2024年5月9日 22:19

c++isalpha(C++小作业求解)

c++isalpha(C++小作业求解)

这篇文章给大家聊聊关于c++isalpha,以及C++小作业求解对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录C++小作业求解c++把一个数字给toupper会返回什么把一个数字给isalpha会返回什么c++中std::i

2024年8月31日 02:25

animation属性unity(u3d里animator,animation有什么区别 吗)

animation属性unity(u3d里animator,animation有什么区别 吗)

本文目录u3d里animator,animation有什么区别 吗Unity UGUI 中butto 的transition 的Animation 怎么用u3d里animator,animation有什么区别 吗把模型分好类分好哪一类模型重

2024年7月9日 12:54

vbs代码为什么打不开(VBS打不开,提示无效字符)

vbs代码为什么打不开(VBS打不开,提示无效字符)

大家好,今天小编来为大家解答以下的问题,关于vbs代码为什么打不开,VBS打不开,提示无效字符这个很多人还不知道,现在让我们一起来看看吧!本文目录VBS打不开,提示无效字符vbs显示缺少对象无法运行打不开老师我的vbs文件打开错误怎么回事希

2024年7月29日 17:40

感觉js逻辑总是不会写(学JS学不会,总是心理觉得浪费太多时间,如何学得快又能快掌握)

感觉js逻辑总是不会写(学JS学不会,总是心理觉得浪费太多时间,如何学得快又能快掌握)

大家好,关于感觉js逻辑总是不会写很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于学JS学不会,总是心理觉得浪费太多时间,如何学得快又能快掌握的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注

2024年7月19日 06:40

一个div浮在另一个div上面(HTML怎么将一个div放在另外一个div上面而不影响上面div的基本操作)

一个div浮在另一个div上面(HTML怎么将一个div放在另外一个div上面而不影响上面div的基本操作)

“一个div浮在另一个div上面”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看一个div浮在另一个div上面(HTML怎么将一个div放在另外一个div上面而不影响上面div的基本操作)!本文目录HTML怎么将一个div放

2024年7月24日 05:35

剪视频怎么剪?如何给视频剪辑

剪视频怎么剪?如何给视频剪辑

本篇文章给大家谈谈剪视频,以及剪视频怎么剪对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录剪视频怎么剪如何给视频剪辑手机怎么把视频剪短剪映怎

2024年7月9日 03:25

scala是什么牌子的车(斯柯达昕动改款最新消息)

scala是什么牌子的车(斯柯达昕动改款最新消息)

本篇文章给大家谈谈scala是什么牌子的车,以及斯柯达昕动改款最新消息对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录斯柯达昕动改款最新消息

2024年9月3日 09:10

html5动态网页代码(关于H5页面 制作怎么自己写代码)

html5动态网页代码(关于H5页面 制作怎么自己写代码)

本文目录关于H5页面 制作怎么自己写代码HTML5能做动态网站吗关于H5页面 制作怎么自己写代码创建作品登陆VXPLO互动大师网站,进入“我的作品”页面。点击创建作品,创建一个手机案例或PC案例。添加素材1、 工具栏中选中图片工具,在白色

2024年6月28日 12:07

房产门户网站源码(房产中介如何找房源)

房产门户网站源码(房产中介如何找房源)

本文目录房产中介如何找房源房产平台类型新网站怎么推广房产中介如何找房源你这是两个问题,先回答第一个。房产中介找房源的方式有几种,一是打电话,中介和物业勾结,手中会通过物业有好多业主的联系方式,他会挨个打电话问,而且这种联系方式他们会保存好长

2024年7月12日 19:39

在word2010中,插入的图片需要使用什么选项卡,设置纸张方向需要使用什么选项卡?用Javascript实现点下面的选项卡图片切换,点左边的选项卡也切换图片

在word2010中,插入的图片需要使用什么选项卡,设置纸张方向需要使用什么选项卡?用Javascript实现点下面的选项卡图片切换,点左边的选项卡也切换图片

其实选项卡图片的问题并不复杂,但是又很多的朋友都不太了解在word2010中,插入的图片需要使用什么选项卡,设置纸张方向需要使用什么选项卡,因此呢,今天小编就来为大家分享选项卡图片的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的

2024年7月25日 08:05

promise sb sth(promise sth to sb等于promise sb sth吗)

promise sb sth(promise sth to sb等于promise sb sth吗)

本文目录promise sth to sb等于promise sb sth吗promise sb sth 和 promise sb to do分别是什么意思promise sb sth怎么造句promise sb sth.promise t

2024年7月22日 06:19

my sql官网下载(我从官网下载了mysql-5.6.14-win32怎么找不到安装程序)

my sql官网下载(我从官网下载了mysql-5.6.14-win32怎么找不到安装程序)

本文目录我从官网下载了mysql-5.6.14-win32怎么找不到安装程序LINUX 下的 My SQL 怎么安装php my sql数据库连接代码 如何上传一个文件到数据库,并可以下载sql server 数据转换成my sql安装M

2024年6月7日 06:03

嫦娥奔月图片(神话故事书里面的嫦娥奔月怎样做笔记)

嫦娥奔月图片(神话故事书里面的嫦娥奔月怎样做笔记)

本文目录神话故事书里面的嫦娥奔月怎样做笔记《王者荣耀》中,嫦娥奔月活动上线,小乔6元皮肤曝光,猪八戒技能像猪圈,对此你怎么看与中秋节起源有关的神话传说有哪些神话故事书里面的嫦娥奔月怎样做笔记《嫦娥奔月》是中国古代神话故事。这个故事说的是嫦娥

2023年5月23日 14:20

c语言if语句的经典例子(c语言用if语句编程,输入一个三位数,判断是否为水仙花数)

c语言if语句的经典例子(c语言用if语句编程,输入一个三位数,判断是否为水仙花数)

本文目录c语言用if语句编程,输入一个三位数,判断是否为水仙花数c语言if语句的经典例子是什么在c语言中,简单if语句,嵌段的if语句,if_else语句有什么不同啊分别举个例子c语言if语句C语言里面if语句的嵌套不太会```有没有比较经

2024年5月5日 11:51

俄罗斯为什么打不过乌克兰(俄罗斯干嘛不大打乌克兰)

俄罗斯为什么打不过乌克兰(俄罗斯干嘛不大打乌克兰)

本篇文章给大家谈谈俄罗斯为什么打不过乌克兰,以及俄罗斯干嘛不大打乌克兰对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录俄罗斯干嘛不大打乌克兰

2024年10月8日 09:25

病毒为什么用汇编写(为什大多数免杀,都将病毒文件反编译成汇编代码而不是高级语言代码 是不是为了统一)

病毒为什么用汇编写(为什大多数免杀,都将病毒文件反编译成汇编代码而不是高级语言代码 是不是为了统一)

本文目录为什大多数免杀,都将病毒文件反编译成汇编代码而不是高级语言代码 是不是为了统一大部分病毒程序是用哪种语言编的为什么大多数人用汇编写病毒,很少人用Java写病毒啊汇编语言写的了病毒吗电脑病毒都是汇编语言编写的,难道不怕不同的cpu的指

2024年6月24日 09:02

radius认证失败是什么意思(校园网宽带连不上,显示: 客户端认证失败 radius online 1)

radius认证失败是什么意思(校园网宽带连不上,显示: 客户端认证失败 radius online 1)

大家好,关于radius认证失败是什么意思很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于校园网宽带连不上,显示: 客户端认证失败 radius online 1的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解

2024年8月26日 11:30

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1736
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索