dephi WaitForMultipleObjects 用法
在Delphi中WaitForMultipleObjects的使用
- procedure ThreadTest;stdcall;
- var
- Handles:TWOHandleArray;
- //Handle:THandle;
- Test:TTest;
- i:Integer;
- begin
- for i := 0 to 10 do
- begin
- Test := TTest.Create(False);
- Handles[i] := Test.Handle;
- end;
- WaitForMultipleObjects( 11, @Handles, True, INFINITE );
- Form1.mmo1.Lines.Add( '123' );
- end;
- procedure TForm1.btn1Click(Sender: TObject);
- var
- ID:Cardinal;
- begin
- CreateThread( nil, 0, @ThreadTest, nil, 0, ID );
- end;
- procedure TTest.Execute;
- begin
- { Place thread code here }
- //FreeOnTerminate := False;
- form1.mmo1.Lines.Add( 'ok' );
- end;
这个例子如果把WaitForMultipleObjects函数放在主线程中执行(btn1Click),会造成线程死锁。这是因为在创建完所有线程后WaitForMultipleObjects函数会导致主线程锁定,等待所有子线程执行完毕。而由于在TTest子线程中需要进行界面交互,会导致死锁。
简单的说,如果A为主线程,B为子线程。WaitForMultipleObjects将A锁定,B操作memo控件,要等待A解锁后才能执行,所以就会导致B永远在那里等待。而B未结束,相应的A中的WaitForMultipleObjects也只能永远等待了。
dephi WaitForMultipleObjects 用法的更多相关文章
- WaitForSingleObject与WaitForMultipleObjects用法详解(好用,而且进入一个非常高效沉睡状态,只占用极少的CPU时间片)
在多线程下面,有时候会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects ...
- WaitForMultipleObjects用法详解
本文转载于:http://blog.csdn.net/sac761/article/details/52456385 WaitForMultipleObjects是Windows中的一个功能非常强大的 ...
- 转:WaitForSingleObject()函数、WaitForMultipleObject()函数
http://blog.csdn.net/xiaobai1593/article/details/6672193 在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以 ...
- Waitforsingleobject 函数的用法
用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法. 但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力.这时,只能考虑 ...
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象. EVENT有两种状态 ...
- WaitForMultipleObject与MsgWaitForMultipleObjects用法
http://blog.csdn.net/byxdaz/article/details/5638680 用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法. 但 ...
- WaitForSingleObject的详细用法
在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObj ...
- [转]同步对象Event的用法
同步对象Event的用法 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. CreateEvent函数功能描述:创建或打开一个命名的或无名的事 ...
- 【转】VC中MessageBox与AfxMessageBox用法与区别
原文网址:http://blog.csdn.net/holybin/article/details/28403109 一.MessageBox()用法 1.函数原型 Messagebox函数在Win3 ...
随机推荐
- C语言基础(转载自大海笔记)
# C语言基础2015年03月26日10:04:411. 语言排行榜C——java——objective-C2. 进制:进制:进位机制.用普通的话讲,应该为人为的定义一种度量来标识一样东西 ...
- 2337:[HNOI2011]XOR和路径 - BZOJ
昨天才做了一道高斯消元,一下要精度判断,一下又不要精度判断 主要是思路很重要 很容易想到每一个二进制位算一个概率,然后求和,设f[i]为走到从i走到n这一个二进制位为1的概率 f[i]:=∑{f[j] ...
- 1038: [ZJOI2008]瞭望塔 - BZOJ
Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, ...
- hibernate hql 大全
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. ...
- sql删除wordpress没用的postmeta记录
支持多作者的wordpress博客,有时需要审核他们的文章内容,虽然UGC(User-generated content)整体是好的,但是也要控制一下质量,实在不相关或spam的文章就要毫不手软的删除 ...
- ie6 iframe src="javascript:" 报安全警报问题
<iframe id="shuaka_iframe" class="embed-page-iframe" data-src="https://w ...
- c_str 以及atoi
const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类 ...
- Android面试宝典(转)
Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语. C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历. 1. ...
- Eclipse字体修改设置
修改字体 Window -> Preferences -> General -> Appearences -> Colors and Fonts 选择java选项,看到Java ...
- Git教程(11)把本地的项目传到远程
1,在远程建立仓库 得到远程仓库地址,如: https://github.com/paulboone/ticgit 2,进入到项目根目录,初始化一个本地仓库 $ git init 3,为本地仓库添加 ...