delphi多线程Delphi多线程有用吗?
delphi多线程 时间:2021-06-24 阅读:(
)
如何在Delphi开发环境中实现多线程的数据查询
1。
通过线程的互斥来同步操作数据库 2。
数据库采用事务处理表中的数据 3。
采用共享方式打开数据库,不是以独占方式打开数据库 建立一个mysql连接表加上一个临界区,表结点是这样的(mysqlcon,bool),根据实际情况定大校我用的是10个连接。
delphi 这样实现也叫做多线程吗,请大家帮忙参考,进者有分!!!
我发表问题时并没有测试预想的代码,现在,问题来了,如果按我所该的那样,当访问SqlCom时出错,当选中2个items时,似乎因为两个线程都访问中包含的adodataset时冲突,也是一个自动化对象,同时也是一个全局对象,其实如果在线程的execute中这样写for i0 to Frmmain.ListViewRes.items.count-1 do begin if Frmmain.ListViewRes.Items .Checked then begin SqlCom.importresource(str1,vDomino,i1) ; //str1:string,文件路径; //vdomino:olevariant,一个自动化对象 //i1:整形 end; end;//end for也可以完成我的需求,而且不会导致的问题;我只想不让程序看起来似乎死掉了而且,当我这样写时,程序居然没有任何错误但是,按照书上所写的,vcl并不都是线程安全的,要使用synchronize()来进行同步那为什么这样写没有错误呢,是偶然的吗?如果用更好的方法,我该怎样改写代码呢?delphi 怎么实现多线程的同步
多线程同步
"临界区"(CriticalSection):?当把一段代码放入一个临界区,?线程执行到临界区时就独占了,?让其他也要执行此代码的线程先等等;
使用格式如下:
var?CS:?TRTLCriticalSection;???{声明一个?TRTLCriticalSection?结构类型变量;?它应该是全局的}?
InitializeCriticalSection(CS);?{初始化}?
EnterCriticalSection(CS);??????{开始:?轮到我了其他线程走开}?
LeaveCriticalSection(CS);??????{结束:?其他线程可以来了}?
DeleteCriticalSection(CS);?????{删除:?注意不能过早删除}?
多线程同步示例
?1?unit?Unit1;?
?2??
?3?interface?
?4??
?5?uses?
?6???Windows,?Messages,?SysUtils,?Variants,?Classes,?Graphics,?Controls,?Forms,?
?7???Dialogs,?StdCtrls;?
?8??
?9?type?
10???TForm1?=?class(TForm)?
11?????ListBox1:?TListBox;?
12?????Button1:?TButton;?
13?????procedure?FormCreate(Sender:?TObject);?
14?????procedure?FormDestroy(Sender:?TObject);?
15?????procedure?Button1Click(Sender:?TObject);?
16???end;?
17??
18?var?
19???Form1:?TForm1;?
20??
21?implementation?
22??
23?{$R?*.dfm}?
24??
25?var?
26???CS:?TRTLCriticalSection;?
27??
28?function?MyThreadFun(p:?Pointer):?DWORD;?stdcall;?
29?var?
30???i:?Integer;?
31?begin?
32???EnterCriticalSection(CS);?
33???for?i?:=?0?to?99?do?Form1.ListBox1.Items.Add(IntToStr(i));?
34???LeaveCriticalSection(CS);?
35???Result?:=?0;?
36?end;?
37??
38?procedure?TForm1.Button1Click(Sender:?TObject);?
39?var?
40???ID:?DWORD;?
41?begin?
42???CreateThread(nil,?0,?@MyThreadFun,?nil,?0,?ID);?
43???CreateThread(nil,?0,?@MyThreadFun,?nil,?0,?ID);?
44???CreateThread(nil,?0,?@MyThreadFun,?nil,?0,?ID);?
45?end;?
46??
47?procedure?TForm1.FormCreate(Sender:?TObject);?
48?begin?
49???ListBox1.Align?:=?alLeft;?
50???InitializeCriticalSection(CS);?
51?end;?
52??
53?procedure?TForm1.FormDestroy(Sender:?TObject);?
54?begin?
55???DeleteCriticalSection(CS);?
56?end;?
57??
58?end.delphi多线程互斥,用多线程怎么解决同一时间内调用同一函数
你对多线程的理解可能有偏,多线程是允许在同一时间内调用同一函数的。
在多线程编程中要注意解决的问题,是防止对全局对象或变量的同时访问。
主要有三种策略,
第一,加锁对象;
第二,使用临界区
第三,使用多读排它写的同步机制。
详细说明,delphi的帮助文档中都有。
Delphi多线程有用吗?
若何是好?它自带的例子如下:var TheStream: TWinSocketStream; buffer: string;在Delphi中应用多线程,创建一个线程后它的┞芳用Cpu率很高都是100%begin { create a TWinSocketStream for reading and writing } TheStream := TWinSocketStream.Create(ClientSocket1.Socket, 60000); try { fetch and mands until the connection or thread is terminated } Synchronize(HandleThreadException); { you must write HandleThreadException } while (not Terminated) and (ClientSocket1.Active) do beginprocedure TMyClientThread.Execute; { continue munication (eg read a response from the server) } try GetNextRequest(buffer); { GetNextRequest must be a thread-safe method } { write the request to the server } TheStream.Write(buffer, Length(buffer) + 1); ... except if not(ExceptObject is EAbort) then end; end; finally TheStream.Free; end;end;
易探云怎么样?易探云是国内一家云计算服务商家,致力香港服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。目前,易探云推出深圳或北京地区的适合挂机和建站的云服务器,国内挂机宝云服务器(可选深圳或北京地区),独立ip;2核2G5M挂机云服务器仅330元/年起!点击进入:易探云官方网站地址易探云国内挂机宝云服务器推荐:1、国内入门型挂机云服务器...
傲游主机怎么样?傲游主机是一家成立于2010年的老牌国外VPS服务商,在澳大利亚及美国均注册公司,是由在澳洲留学的害羞哥、主机论坛知名版主组长等大佬创建,拥有多家海外直连线路机房资源,提供基于VPS主机和独立服务器租用等,其中VPS基于KVM或者XEN架构,可选机房包括中国香港、美国洛杉矶、韩国、日本、德国、荷兰等,均为CN2或者国内直连优秀线路。傲游主机提供8折优惠码:haixiuge,适用于全...
目前国内云计算市场竞争异常激烈,尤其是国内的腾讯云、阿里云、景安等商家促销活动一波接一波的进行,对于有需要的用户确实得到不小的实惠。但是这样给予国内的主机商确实是比较大的打击,毕竟这些商家的背景和实例强劲,即便是贴本补贴优惠,也是不怕的。前两年阿里一家各种活动促销,确实在国内市场占据主要的市场地位,腾讯云开始两年没有较大的吸引用户,不过这两年的发展还是比较稳健的。我们很多网友在之前肯定也享受到一些...
delphi多线程为你推荐
订房系统常用的酒店管理软件有哪些instagram电脑版iOS 有哪些优秀的照片处理软件oledbdatareader根据输入信息读取数据库中的数据,总是在执行OleDbDataReader reader = cmd.ExecuteReader()时通不过,防火墙技术应用常用防火墙技术有哪几种flash序列号flash激活序列号是?空间导航怎么设置QQ空间个性导航云家政网腾讯网的网址是多少?backupexecBackup Exec 2014怎么备份Exchange微盟价格微盟怎么收费?ps5教程怎样使用PS5的程序
四川虚拟主机 欧洲欧洲vps 3322动态域名 l5639 香港主机 谷歌香港 云主机51web 699美元 重庆双线服务器托管 环聊 中国linux 中国联通宽带测速 万网注册 国内空间 512内存 酷锐 蓝队云 时间服务器 免费网站加速 此网页包含的内容将不使用安全的https 更多