http://expert.csdn.net/Expert/topic/2642/2642317.xml?temp=.6756708
解决方案 »
- 在form上显示一个BMP图片的问题。。新手
- 散分。。。刘翔还能成为英雄吗?
- 有那位高手能编写好用的游戏密码截取软件,请联系我,月薪高高!
- 如何把现有的DELPHI程序转成繁体而又不出现乱码??????????
- 关于Web SERVICE在IIS下的部署问题
- 如何使用线程
- palPalEntry: array[0..0] of TPaletteEntry其中array[0..0]是什么意思啊
- 在delphi6中如何调用oracle中返回数据集的存储过程?
- VC++中的 char 在delphi中是pchar吗?
- 这几行代码不能执行,请各位指点一下
- 问个函数指针的语法问题,请各位哥哥姐姐指教,谢谢
- 给点美化窗体界面的意见吧
在线程中需要用Synchronize方法进行调用
你可以看一下Delphi中关于线程的Demo
是为一些非进程安全函数或控件准备的,并不是一定要调用,对于哪些函数属于非进程安全,在delphi的help中有说明的。
1、Synchronize方法
2、sendmessage、postmessage
3、临界区
Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};type
ThreadProc=procedure(p:Pointer) of object; MyThread = class(TThread)
private
pProc:ThreadProc;
procedure SetName;
protected
procedure Execute; override;
public
pParam:Pointer;
constructor create(ProcAddr:ThreadProc);overload;
end;implementation{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure MyThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }{$IFDEF MSWINDOWS}
type
TThreadNameInfo = record
FType: LongWord; // must be 0x1000
FName: PChar; // pointer to name (in user address space)
FThreadID: LongWord; // thread ID (-1 indicates caller thread)
FFlags: LongWord; // reserved for future use, must be zero
end;
{$ENDIF}{ MyThread }procedure MyThread.SetName;
{$IFDEF MSWINDOWS}
var
ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := 'aaa';
ThreadNameInfo.FThreadID := $FFFFFFFF;
ThreadNameInfo.FFlags := 0; try
RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
except
end;
{$ENDIF}
end;procedure MyThread.Execute;
begin
SetName;
if(pProc<>nil) then pProc(pParam);
{ Place thread code here }
end;constructor MyThread.create(ProcAddr: ThreadProc);
begin
self.pProc:=ProcAddr;
end;end.