体育资讯网

您现在的位置是:首页 > 足球教学 > 正文

足球教学

delphi线程池源码下载(delphi源代码下载)

hacker2022-07-11 04:41:21足球教学81
本文目录一览:1、delphiFTP多线程下载(能支持断点更好)2、

本文目录一览:

delphi FTP 多线程下载 (能支持断点更好)

你就是想要一个FTP程序吗,建议下载一个免费的FTP Server。

nmftp本身不支持多线程!

支持多线程的FTP控件都是收费的!

我在编一个程序的时候也想做一个多线程的FTP,当时研究了一段时间,发现代码太大了!

最后用了一个Linux下的Proftpd解决了这个问题。

用delphi如何实现线程池

在python中“+=”与C语言中的“+=”用法一样,buffer += jmpesp等同于buffer = buffer + jmpesp,当然也可以用后者来表示。

ord函数可用于将指定字符转换成ASCIIi码,函数声明如下:

ord(字符)

例:

print ord('A')

65

注意ord函数只接受字符,不能接受字符串。

高分求助 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源代码

灰鸽子VIP1.2的源代码

灰鸽子是一个远程控制类软件delphi线程池源码下载,主要功能有:

1.文件管理:模枋 Windows 资源管理器,可以对文件进行:复制、粘贴、删除,重命名、远程运行等,可以上传下载文件或文件夹,操作简单易用。

2.远程控制命令:查看远程系统信息、剪切板查看、进程管理、窗口管理、外设控制、服务管理、共享管理、代理服务、MS-Dos模拟、其它控制delphi线程池源码下载

3.捕获屏幕:不但可以连继的捕获远程电脑屏幕,还能把本地的鼠标及键盘传动作送到远程实现实时控制功能!

4.注册表模拟器:远程注册表操作就像操作本地注册表一样方便!

5.远程通讯:除普通的文字聊天以外,还有语音聊天的功能(双方ADSL上网情况下语音良好)!

6.代理服务:可以让服务端开放Socks5代理服务器功能,还可以让服务端开放FTP功能!

7.命令广播:可以对自动上线主机进行命令播,如关机、重启、打开网页等,点一个按钮就可以让N台机器同时关机或其它操作!

发表评论

评论列表

  • 末屿杞胭(2022-07-11 06:58:30)回复取消回复

    有关线程帮助之后能立刻实现。这里介绍的是多个线程查询的同步进行。 在Delphi数据库应用中,都有一个缺省的数据库会话 Session。通常情况下,每个数据库应

  • 晴枙囤梦(2022-07-11 12:32:30)回复取消回复

    } unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCt

  • 离鸢各空(2022-07-11 13:54:58)回复取消回复

    cedure TForm1.FormDestroy(Sender: TObject); begin Q1.Terminate; { 销毁之前终止线程执行 } Q1.Destroy; Q2.Terminate; { 销毁之前终止线程执行 } Q2.Destroy; end; { 开始线程、继

  • 语酌债姬(2022-07-11 12:51:52)回复取消回复

    ; begin if Q1.Suspended then Q1.Resume else Q1.Suspend; if Q2.Suspended then Q2.Resume else Q2.Su