1.线程里面调用VCL不安全,到底怎么操作不安全,我做一个字幕滚动,就改下LABEL的位置安全否?不见控件操作起来安全否,比如TCientSockte?2.把字幕滚动的过程labelroll()放到Synchronize,结果界面冻结了,直接放到线程中则没事(但是不安全?)
procedure labelroll()
begin
while( Label1.Top>-16)do
begin
Label1.Top:=Label1.Top-2;
Label2.Top:=Label2.Top-2;
Sleep(1000);
end;
end;
我想正确的写法可能是线程中放:
while( Label1.Top>-16)do
begin
Synchronize(移动LABEL);
Sleep(1000);
end;
3.我有一个函数,里面有很多操作,需要放到一个线程里面执行.
我发现Synchronize(直接套这个函数),结果执行时界面冻结,就是说用Synchronize时,多程序根本不起作用.
但是函数里面有很多VCL控件,大部分是涉及网络操作的不可见控件,这些控件不套用Synchronize安全吗?
谢谢大家!
procedure labelroll()
begin
while( Label1.Top>-16)do
begin
Label1.Top:=Label1.Top-2;
Label2.Top:=Label2.Top-2;
Sleep(1000);
end;
end;
我想正确的写法可能是线程中放:
while( Label1.Top>-16)do
begin
Synchronize(移动LABEL);
Sleep(1000);
end;
3.我有一个函数,里面有很多操作,需要放到一个线程里面执行.
我发现Synchronize(直接套这个函数),结果执行时界面冻结,就是说用Synchronize时,多程序根本不起作用.
但是函数里面有很多VCL控件,大部分是涉及网络操作的不可见控件,这些控件不套用Synchronize安全吗?
谢谢大家!
解决方案 »
- 帮看看这个~通用的打开窗体过程
- 会delphi的帮个忙,帮我看看以下代码
- listView的删除问题?
- 编辑通过,可在运行时点击窗口,窗口纹丝不动
- 高分悬赏(关于ComboBox组件)
- 怎样用SENDMESSAGE发送以字节为单位的数据,不是字符
- 为什么我用的clientdataset1过滤技术无法过滤中文字,而数字或英文却可以,我该如何过滤中文字,我一定要使用clientdataset的过滤技术
- 三层结构数据的新增,修改和删除
- 奇怪!奇怪!真奇怪!!TClientSocket&TServerSocket控件
- 已知点的坐标,和多边形的顶点坐标,怎么判断该点是否在这个多边形内?
- 线程的小问题
- 关于淘宝API sign签名加密
function TForm1.ISinternetokPing:Boolean;
var
IdIcmpClient: TIdIcmpClient;
begin
result:=False;
IdIcmpClient := TIdIcmpClient.Create(Self);
IdIcmpClient.ReceiveTimeout :=2000;
IdIcmpClient.Host :='baidu.com';
try
IdIcmpClient.Ping;
if IdIcmpClient.ReplyStatus.ReplyStatusType = rsecho then
result:=True;
except
end;
end;
end;盼高手解答
2. 想法正确
3. 改成这样就是安全的:
function TForm1.ISinternetokPing:Boolean;
var
IdIcmpClient: TIdIcmpClient;
begin
result:=False;
IdIcmpClient := TIdIcmpClient.Create(nil);
try
IdIcmpClient.ReceiveTimeout :=2000;
IdIcmpClient.Host :='baidu.com';
try
IdIcmpClient.Ping;
if IdIcmpClient.ReplyStatus.ReplyStatusType = rsecho then
result:=True;
except
end;
finally
IdIcmpClient.free
end;
end;
end;
非常感谢!是否如果能十分确定,一个VCL资源只有一个线程访问,就可以不用Synchronize.
比如我在自建的一个线程中移动label的位置,主线程及其它线程只要不操作这个label就可以直接放在线程里运行?
放到Synchronize的函数必须短小。另外你那个Sleep(1000)都放到Synchronize里肯定死机。