
多线程学习资料
文章平均质量分 88
yangar9179
只要辛勤的劳动,生活会美好的
展开
-
ThreadLocal与synchronized
相关文章: 正确理解ThreadLocal ThreadLocal与synchronized 推荐圈子: Pipboy 更多相关推荐 <!-- new Draggable("related_topics"); // -->昨天上Java版块逛了一圈,一个2万5千人浏览的帖子引起了偶滴注意 ThreadLocal原创 2008-04-15 17:21:00 · 3322 阅读 · 7 评论 -
Delphi多线程学习(11):多线程图形操作
VCL对象不是线程安全的,而且它们的属性和方法必须要从VCL主线程中进行访问或被执行,但有两种VCL对象是例外的情况,它们是线程安全的。一种是任何图形对象,另一种是TThreadList。 这意味着不必非得在主VCL线程中才能设置一个画布的画笔颜色,或画刷类型,可以在另一个线程的环境中完成一点。对于图形对象,使用Lock和UnLock,而对于ThreadList,则使用LockList转载 2010-02-22 17:26:00 · 454 阅读 · 0 评论 -
Delphi多线程学习(9):多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题:1、CoInitialize 没有调用(CoInitialize was not called);所以,在使用任何dbGo对象前,必须手 调用CoInitialize和CoUninitialize。调用CoInitialize失败会产生"CoInitialize was not called"例外。2、画布不允许绘画(Canvas does not转载 2010-02-22 17:24:00 · 963 阅读 · 1 评论 -
Delphi多线程学习(7):事件Event
Event事件用法与Mutex差不多,但它可以使用:SetEvent(启动运行)ResetEvent(暂停运行)、PulseEvent(执行一次后立即暂停)。 先看一下创建函数:CreateEvent( lpEventAttributes: PSecurityAttributes;转载 2010-02-22 17:21:00 · 395 阅读 · 0 评论 -
Delphi多线程学习(8):优先级
一个线程的优先级取决于创建线程的进程的优先级(priority class)和线程本身相对的优先级(relative priority)。 1、进程优先级: 不同操作系统 优先级数目不同。Windows2000以上的版本列表如下:Idle:(标志:IDLE_PRIORITY_CLASS,值为$40); Below Normal:(标志:BELOW_NORMAL_PRIORI转载 2010-02-22 17:22:00 · 800 阅读 · 0 评论 -
Delphi多线程学习(5):互斥量Mutex
互斥量是系统内核对象,谁拥有就谁执行。它与临界区工作很类似。不同处在于:1、互斥量可以跨进程边界同步线程。2、可以给互斥量取个名字,通过引用互斥量的名字来使用一个已知的互斥量对象。 使用互斥量之类的对象需要反复调用系统内核,期间需要进行进程上下文转换和控制级别转换,大概需要耗费400到600个时间周期。 又是图书馆的比喻,现在是搞一个锁,把钥匙(互斥量句柄)交给管理员(操转载 2010-02-22 17:18:00 · 1084 阅读 · 0 评论 -
Delphi多线程学习(6):信号量Semaphore
信号量是建立在互斥量的基础之上,同时加入重要特性:提供了资源计数功能,因此预定义数量的线程同时可以进入同步的代码块中。 信号量是维护0到指定最大值之间的计数器的同步对象,当线程完成一次信号量的等待时,计数器自减1,当线程释放信号量对象时,计数器自增1。 借用上面的图书馆例子,信号量好像是多设几把管理钥匙。每次可以设定N把钥匙同时工作,那就有N个人员可以同时办理业务。转载 2010-02-22 17:18:00 · 577 阅读 · 0 评论 -
Delphi多线程学习(4):临界区
临界区是一段代码,一次只允许一个线程执行这段代码。当把一段代码放入一个临界区, 线程执行到临界区时就独占了, 其他线程如果要访问这段代码,一定要等前一个访问的线程结束才行。借用前面的比喻比作图书馆,临界区就像把图书馆设计成只有一个位置(现实中好像不太合理,不管了,反正这么个意思),当有一个人正在办理业务时,其他人只能等待那个人办完业务才能进去。 使用临界区的步骤: 1、声明一转载 2010-02-22 17:15:00 · 1444 阅读 · 1 评论 -
Delphi多线程学习(3):线程同步的原因
在使用多线程的时候,如果多线程对某个特定的公共数据或资源进行访问,需要对多线程进行协调操作,叫做线程同步。 例如:三个线程分别循环地向ListBox中写入数据。没有进行同步时,写入的顺序是不确定的。{主窗体代码}unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes转载 2010-02-22 17:12:00 · 545 阅读 · 0 评论 -
Delphi多线程学习(2):Delphi中的多线程类TThread。
2010-02-22 17:08:46Delphi把多线程相关的API封装在TThread这个类中,可以方便实现多线程运用。首先看下TThread的声明:TThread = class private FHandle: THandle; FThreadID: THandle; FCreateSuspended: Boolean; FTermi转载 2010-02-22 17:07:00 · 889 阅读 · 0 评论 -
Delphi多线程学习(10):Label(VCL)同步的问题
上文中,多线程同步主窗体的Label的Caption属性值,发现一个问题:使用Synchronize用于同步的时候,主窗体好像死掉一样;而直接用子程序为Label的引用赋值,则有时会出现“Canvas does not allow drawing”错误。书上说VCL同步一定要用Synchronize,而不能直接访问。 测试:{主窗体}unit Unit2; interf转载 2010-02-22 17:25:00 · 635 阅读 · 0 评论