Delphi 多线程的操作
Delphi 操作多线程的代码, 在项目中需要在webservice中使用多线程,程序思想如下:
1.就创建一个线程, 也就是说有两个线程,主线程和创建的线程, 主线程用于程序的别的操作,例如停止服务,和关闭程序等等。
2.辅线程用于调用Webservice,用他的目的,还有就是方便查看memo中的日志, 如果只有一个线程,这是不可能的,只有等调用结束才可以,但是这里面又用到了Timer,结果想在主线程查看memo,很费劲。故创建一个辅线程。
type
TMyThread = class(TThread)
private
FMyThreadExecfinish: Boolean;
FHTTPRIOLeExp: THTTPRIO;
FHTTPRIONC: THTTPRIO;
FHTTPRIOLeExp2: THTTPRIO;
FHTTPRIOLeExp3: THTTPRIO;
function ExecTimer: Boolean;
protected
FLogStrings: TStrings;
procedure Execute; override;
public
property LogStrings: TStrings read FLogStrings write FLogStrings;
property MyThreadExecfinish: Boolean read FMyThreadExecfinish write FMyThreadExecfinish;
property HTTPRIOLeExp: THTTPRIO read FHTTPRIOLeExp write FHTTPRIOLeExp;
property HTTPRIONC: THTTPRIO read FHTTPRIONC write FHTTPRIONC;
property HTTPRIOLeExp2: THTTPRIO read FHTTPRIOLeExp2 write FHTTPRIOLeExp2;
property HTTPRIOLeExp3: THTTPRIO read FHTTPRIOLeExp3 write FHTTPRIOLeExp3;
end;
procedure TfrmDataExchangePlatformMain.FormShow(Sender: TObject);
begin
MyThread := TMyThread.Create(True); // false 则自动调用Execute, True, 需要Resume后,在调用Execute
MyThread.LogStrings := cxMemo_Log.Lines;
MyThread.MyThreadExecfinish := True;
MyThread.HTTPRIOLeExp := DMConn.HTTPRIOLeExp;
MyThread.HTTPRIONC := DMConn.HTTPRIONC;
end;
procedure TfrmDataExchangePlatformMain.Timer_ServiceTimer(Sender: TObject);
var
ID: THandle;
begin
if MyThread.MyThreadExecfinish then
MyThread.Resume;
//CreateThread(nil, 0, @ExecTimer, nil, 0, ID); //ExecTimer;
end;
{ TMyThread }
procedure TMyThread.Execute;
begin
inherited;
//FreeOnTerminate := True; {这可以让线程执行完毕后随即释放} 这个就不能要了, 因为你需要这个线程,在程序结束的时候把线程关闭就可以了
if MyThreadExecfinish then
ExecTimer;
end;
function TMyThread.ExecTimer: Boolean;
begin
Result := False ;
FMyThreadExecfinish := False;
Screen.Cursor := crHourGlass;
CoInitialize(nil);
try
TranspondClientBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
Sleep(1000);
TranspondPersonBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
Sleep(1000);
TranspondDeptBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
finally
Result := True;
FMyThreadExecfinish := True;
Screen.Cursor := crDefault;
CoUninitialize;
end;
end;
Delphi 多线程的操作的更多相关文章
- [转]Delphi多线程编程入门(二)——通过调用API实现多线程
以下是一篇很值得看的关于Delphi多线程编程的文章,内容很全面,建议收藏. 一.入门 ㈠. function CreateThread( lpThreadAttributes: Pointer ...
- [转]Delphi多线程编程入门(一)
最近Ken在比较系统地学习Delphi多线程编程方面的知识,在网络上查阅了很多资料.现在Ken将对这些资料进行整理和修改,以便收藏和分享.内容基本上是复制粘贴,拼拼凑凑,再加上一些修改而来.各个素材的 ...
- delphi 多线程3
多线程程序设计 我们知道,win95或winNT都是“多线程”的操作系统,在DELPHI .中,我们可以充分利用这一特性,编写出“多线程”的应用程序. 对以往在DOS或16位windows下写程序的 ...
- Delphi多线程详解
(整理自网络) Delphi多线程处理 1-1多线程的基本概念 WIN 98/NT/2000/XP 是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU 运行时间和资源,或者 ...
- 转:学习笔记:delphi多线程学识
学习笔记:delphi多线程知识 最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处 ...
- iOS多线程拾贝------操作巨人编程
iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...
- Delphi 多线程 “尚未调用CoInitialize错误”的解决方法
在Delphi 多线程中出现“尚未调用CoInitialize错误”的解决方法 解决方法如下: function TMyThread.ExecTimer: Boolean;begin Resul ...
- Delphi中的操作二进制文件的两个重要函数
Delphi中的操作二进制文件的两个重要函数 对于通过Byte数组进行文件操作的,在FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的 ...
- delphi 文件的操作:重命名、复制、移动、删除
Delphi 文件的操作:重命名.复制.移动.删除第一种方法: RenameFile('Oldname', 'Newname'); CopyFile(PChar('Oldname'), PChar(' ...
随机推荐
- Qt 学习之路:QSortFilterProxyModel
从本章开始,我们将逐步了解有关自定义模型的相关内容.尽管前面我们曾经介绍过 Qt 提供的几个内置模型:QStringListModel和QFileSystemModel,但对于千变万化的需求而言,这些 ...
- (总结)Nginx配置文件nginx.conf中文详解 <转>
转自 http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_proc ...
- yii columns value and type and checkbox columns
value I am here type I am here checkbox columns useage
- Android上使用OpenGLES2.0显示YUV数据
在Android上用OpenGLES来显示YUV图像,之所以这样做,是因为: 1.Android本身也不能直接显示YUV图像,YUV转成RGB还是必要的: 2.YUV手动转RGB会占用大量的CPU资源 ...
- java判断不为空
因为java是强类型语言,所以判断空的时候分null 和字符串空 if(userID == null || "".equals(userID)){ response.sendRed ...
- 防止sql注入 参数化解决方案
StringBuilder strSql=new StringBuilder(); strSql.Append("insert into T_SysLog("); strSql.A ...
- firebug js版
1.有些时候如 ie6 7 8 你觉得F12 不好用的话 你可以直接 把这两个js 引用到html 里面 <script src="https://getfirebug.com/fi ...
- pugixml使用教程
pugixml介绍 pugixml是一个高性能.轻量级并且简单易用的xml解析库,支持UTF8 encoding.Little-endian UTF16.Big-endian UTF16.UTF16 ...
- 完数c实现
完数,顾名思义,就是一个数如果恰好等于它的因子之和.例如6=1+2+3.编写找出1000以内的所有完数 #include <stdio.h> #include <stdlib.h&g ...
- 字符串转换成JSON(js)
JSON.parse('{"site":"zlog"}'); 使用JSON.parse需严格遵守JSON规范, 属性都需用双引号引起来, 一定是双引号!! 相反 ...