第一种最简单即是使用delphi封装的synchronize(procedure)这个函数。
这个函数他把procedure中的代码,放到主线程中执行。所以是串行化,每次执行一个
线程。
procedure TMyThread.MyProcedure;
begin
//你的代码
end;
procedure TMyThread.Execute;
begin
Synchronize(MyProcedure);
end;
然后是有TCriticalSection这个类。他有两个方法:Enter,Leave
也是每次只执行一个线程。
var CS:TCriticalSection;
procedure TForm.OnCreate();
begin
CS:=TCriticalSection.Create;
end;
procedure TMyThread.Execute;
begin
CS.Enter;
//你的代码
CS.Leave;
end;
其他就是windows api函数,创建内核对象。
如CreateMutex,CreateEvent,CreateSemaphore
创建后要用waitforsingleobject或waitformultipleobject.
但这些函数复杂些但功能也更强大。可以同时运行多个线程。
但代码如下,都差不多。
procedure TForm.OnCreate()
begin
CreateMutex(nil,True,'mymutex');
end;
procedure TMyThread.Execute;
var hand:THandle;
begin
hand:=OpenMutex(MUTEX_ALL_ACCESS,False,'mymutex');
WaitForSingleObject(hand,INFINITE);
//你的代码
end;
这个函数他把procedure中的代码,放到主线程中执行。所以是串行化,每次执行一个
线程。
procedure TMyThread.MyProcedure;
begin
//你的代码
end;
procedure TMyThread.Execute;
begin
Synchronize(MyProcedure);
end;
然后是有TCriticalSection这个类。他有两个方法:Enter,Leave
也是每次只执行一个线程。
var CS:TCriticalSection;
procedure TForm.OnCreate();
begin
CS:=TCriticalSection.Create;
end;
procedure TMyThread.Execute;
begin
CS.Enter;
//你的代码
CS.Leave;
end;
其他就是windows api函数,创建内核对象。
如CreateMutex,CreateEvent,CreateSemaphore
创建后要用waitforsingleobject或waitformultipleobject.
但这些函数复杂些但功能也更强大。可以同时运行多个线程。
但代码如下,都差不多。
procedure TForm.OnCreate()
begin
CreateMutex(nil,True,'mymutex');
end;
procedure TMyThread.Execute;
var hand:THandle;
begin
hand:=OpenMutex(MUTEX_ALL_ACCESS,False,'mymutex');
WaitForSingleObject(hand,INFINITE);
//你的代码
end;
解决方案 »
- 求助高手(急...),cxdbtreelist,怎么让节点根据值的不同再改变记录的颜色?
- 将datagridview的数据转换成datata
- 如何用delphi6访问infomix数据库
- 求一简单SQL语句
- 请教在Access数据库如何使用Like语句
- ****100分———换一个PP号。2000分求“潘多拉之盒”这款游戏的稳定下载地址!
- 输入法切换导致程序无响应的问题
- 三层结构为什么用ClientDataSet传汉字参数.字节会减少,如何解决?
- 超难度sql语句
- 为什么用table控的insert和append方法总是将记录插入到当前记录之前,有没有办法解决?
- 怎样把字符串变量值放入记事本中?
- 我是delphi初学者,对数据库别名有一点疑问
当然使用TCriticalSection,最为方便,因为DELPHI以封装。
也可以用synchronize
如
interfere
type TForm1=Class(TForm0....implementation
var CS:TCriticalSection;
//在这个地方定义即可!
procedure TForm1............
..