张志峰的博客

水滴石川,积少成多。

导航

随笔分类 -  Delphi 多线程

摘要:临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别 TRtlCriticalSection 是一个结构体,在windows单元中定义; 是InitializeCriticalSection,EnterCriticalSection,Leav 阅读全文

posted @ 2017-05-23 17:54 ╰★张志峰★╮ 阅读(1054) 评论(0) 推荐(0)

摘要:http://bbs.csdn.net/topics/390744417 串口控件本身的线程不是这样理解的,你不用管它本身用不用线程,它的内部线程和你也没关系。前面说过了,你可以在自己的主线程里创建好Spcomm,并配置好各个参数,然后你的线程就可以用这个在主线程里创建的SPCOMM了。为了简单,一 阅读全文

posted @ 2017-05-22 13:44 ╰★张志峰★╮ 阅读(520) 评论(0) 推荐(0)

摘要:引用 http://www.cnblogs.com/del/archive/2011/05/18/2049913.html 先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): 修改为多线程(只修改一行代码): 代码分析:1、TThread 现在增加了许多 class 方法(直接通 阅读全文

posted @ 2017-05-16 17:43 ╰★张志峰★╮ 阅读(5258) 评论(0) 推荐(1)

摘要:在对数据库的操作时,有时要用一个子线程来进行后台的数据操作。比如说数据备份,转档什么的。在主窗口还能同是进行其它操作。而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上(可视),同时进行日志处理等。我用的是下面的方法: [1]用到的API函数:RegisterWind 阅读全文

posted @ 2016-12-19 14:50 ╰★张志峰★╮ 阅读(1367) 评论(0) 推荐(0)

摘要:求一个线程和主界面的交互的演示代码求一个线程和主界面的交互的演示代码。线程和主界面处于两个Unit。线程中的user中不能引用主窗口。我只是想学习一下,线程和主界面交互的方法。去网上查了好几天资料,能查到的都是user中引用主窗口的方法。据说可以通过别的方法实现,求大神指点下了。跪求~~~ 解决方案 阅读全文

posted @ 2016-12-19 14:47 ╰★张志峰★╮ 阅读(1400) 评论(0) 推荐(0)

摘要:Suspend放到循环里 解决方案 执行完不结束只休眠。另外还需要线程池。 解决方案 while not Terminated do begin //do something finish if not Terminated then//最好还加上这句 Suspend(); end; 解决方案 Fi 阅读全文

posted @ 2016-10-31 10:38 ╰★张志峰★╮ 阅读(162) 评论(0) 推荐(0)

摘要:多个线程同时访问一个共享资源或数据时,需要考虑线程同步,Synchronize()是在一个隐蔽的窗口里运行,如果在这里你的任务很繁忙,你的主窗口会阻塞掉;Synchronize()只是将该线程的代码放到主线程中运行,并非线程同步。 临 界区是一个进程里的所有线程同步的最好办法,他不是系统级的,只是进 阅读全文

posted @ 2016-10-26 14:11 ╰★张志峰★╮ 阅读(221) 评论(0) 推荐(0)

摘要:通俗解释就像上厕所: 门锁了,就等着,等到别人出来了,进去锁上,然后该干什么干什么,干完了,把门打开 门没锁,就进去,锁上,然后该干什么干什么,干完了,把门打开 多线程中用来确保同一时刻只有一个线程操作被保护的数据 InitializeCriticalSection(&cs);//初始化临界区 En 阅读全文

posted @ 2016-10-26 13:59 ╰★张志峰★╮ 阅读(236) 评论(0) 推荐(0)

摘要:TRTLCriticalSection是一个结构体,在windows单元中定义; 是InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection 等这几个kernel32.dll中的临界区操作API的参数; TCriticalSection是在SyncOb... 阅读全文

posted @ 2016-10-26 11:10 ╰★张志峰★╮ 阅读(180) 评论(0) 推荐(0)

摘要:http://www.cnblogs.com/doit8791/archive/2012/05/16/2502671.html 阅读全文

posted @ 2016-10-26 10:54 ╰★张志峰★╮ 阅读(179) 评论(0) 推荐(0)

摘要:Thread给几点说明:1、MyThread的实例作为TForm1的成员变量2、不要使用Form1这个全局变量,线程中可要使用它的Handle,你可以在Form中创建MyThread的实例时把Handle传递进去作为MyThread的成员变量保存3、OnWM_MYMESSAGE不要写Form1.Sh 阅读全文

posted @ 2016-07-27 16:03 ╰★张志峰★╮ 阅读(296) 评论(0) 推荐(0)

摘要:unit1 [delphi] view plain copyunit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; 阅读全文

posted @ 2016-02-29 16:48 ╰★张志峰★╮ 阅读(2411) 评论(0) 推荐(0)

摘要:在Delphi中WaitForMultipleObjects的使用 procedure ThreadTest;stdcall; var Handles:TWOHandleArray; //Handle:THandle; Test:TTest; i:Integer; begin for i := 0  阅读全文

posted @ 2016-02-29 16:47 ╰★张志峰★╮ 阅读(550) 评论(0) 推荐(0)

摘要:如果Resume不能唤起线程,请试试如下的函数,试试。GetExitCodeThread(ThreadHandle,ExitCode)来取得ExitCode,如果ExitCode=STILL_ACTIVE表示线程还存在,对于存在的线程,则可以使用ResumeThread(ThreadHandle)来唤醒线程,如果线程仍然处于运行状态,则会返回错误具体的自己去看相关的API的返回值。本人在实际应用中还是没能够解决上面问题,只好委曲找到另一种解决方法。procedure TfrmDataExchangePlatformMain.ActionStartServiceExecute( Sender: 阅读全文

posted @ 2013-09-16 16:04 ╰★张志峰★╮ 阅读(3837) 评论(0) 推荐(0)

摘要:在Delphi 多线程中出现“尚未调用CoInitialize错误”的解决方法解决方法如下:function TMyThread.ExecTimer: Boolean;begin Result := False ; FMyThreadExecfinish := False; Screen.Cursor := crHourGlass; CoInitialize(nil);// 一定要加上此行代码 try TranspondClientBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings); Sleep(1000); TranspondPers 阅读全文

posted @ 2013-09-13 14:49 ╰★张志峰★╮ 阅读(4259) 评论(0) 推荐(0)

摘要:Delphi 操作多线程的代码, 在项目中需要在webservice中使用多线程,程序思想如下:1.就创建一个线程, 也就是说有两个线程,主线程和创建的线程, 主线程用于程序的别的操作,例如停止服务,和关闭程序等等。2.辅线程用于调用Webservice,用他的目的,还有就是方便查看memo中的日志, 如果只有一个线程,这是不可能的,只有等调用结束才可以,但是这里面又用到了Timer,结果想在主线程查看memo,很费劲。故创建一个辅线程。type TMyThread = class(TThread) private FMyThreadExecfinish: Boolean; FHTTPRIOL 阅读全文

posted @ 2013-09-13 14:41 ╰★张志峰★╮ 阅读(3711) 评论(0) 推荐(0)