在调用任何其他原子管理函数前调用它。这里只简单介绍本地原子表。它有多个相关的函数,
functionInitAtomTable(nSize:DWORD):BOOL;stdcall;
functionDeleteAtom(nAtom:ATOM):ATOM;stdcall;
functionAddAtom(lpString:PWideChar):ATOM;stdcall;
functionFindAtom(lpString:PWideChar):ATOM;stdcall;
functionGetAtomName(nAtom:ATOM;lpBuffer:PWideChar;nSize:Integer):UINT;stdcall;
以下介绍全局原子表相关函数。
functionGlobalAddAtom(lpString:PWideChar):ATOM;stdcall;
增加一个字符串到全局原子表中,并返回一个唯一标识值。
lpString参数为要添加到全局原子表中的字符串。
如果成功返回新增加的全局原子,失败则返回0。ATOM类型等于Word类型。
functionGlobalDeleteAtom(nAtom:ATOM):ATOM;stdcall;
减少对指定全局原子的引用计数,引用计数减1,如果引用计数为零,系统会在全局原子
表中删除此原子。
此函数一直返回0。
只要全局原子的引用计数大于0,其原子名称将保留在全局原子表中,即使把它放入表中
的应用程序终结了。一个本地的原子表在应用程序终结时被销毁,而不管其中原子的引用计
数是多少。
functionGlobalFindAtom(lpString:PWideChar):ATOM;stdcall;
在全局原子表中查找是否存在指定字符串。
lpString参数为要查找的字符串。
如果在全局原子表中存在要查找的字符串,则返回此字符串对应的原子,没有找到则返回0。
functionGlobalGetAtomName(nAtom:ATOM;
lpBuffer:PWideChar;nSize:Integer):UINT;stdcall;
返回指定原子所对应的字符串。
nAtom参数为指定查找的原子,lpBuffer参数为要存放字符串的缓冲区,nSize参数为缓冲
区大小。
若操作成功返回缓冲区接受长度,若失败返回0。UINT类型等于LongWord类型。
例:
//在程序的program文件中
...
ifGlobalFindAtom(iAtom)=0then
begin
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end
else
MessageBox(0,'已经有一个程序在运行','',mb_OK);
...
6.Synchronize同步
Synchronize()是定义在TThread类中的函数,它可以让要执行的代码实现线程同步,但这
种同步其实是伪同步,其原理是将子线程要执行的代码通过消息传递给主线程,由主线程来
执行,主线程将代码放在一个隐蔽的窗口里运行,而子线程会等待主线程将执行结果发给它,
这样的话,这段代码就不是子线程代码,而是一般的主线程代码。Synchronize()只是将该
线程的代码放到主线程中运行,并非实际意义的线程同步。RADStudioVCLReference中也
描述为:Executesamethodcallwithinthemainthread,Synchronizecausesthecallspecifiedby
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32871-11.html
做什么事情都要有个度
大东沟海战在日本围着定镇两舰打的情况下
让美彻底放弃冷战思维除非衰退加速