高难度问题(至少对我来说是这样子地),小弟想了几天都没有想出来。如何将一变量传入Timer的OnTimer事件??(100分)

A

abc_xp

Unregistered / Unconfirmed
GUEST, unregistred user!
在Timer的OnTimer事件中要传入一变量,如何做?

用全局变量好像不行

具体情况:
在OnTimer事件中要调用一变量,如果用全局变量 S 当然可以调用,但是我要求在OnTimer
事件中要求 S 的值不能改变,但是 S 的值随时都有可能被OnTimer事件以外的代码改变

我该如何做?

有何其它方法?
 
那就定义一个全局变量,在ontimer中不改变不就可以了!
 
重载一TTimer,然后在Private中声明你要的变量,如何使用它则由你自己决定。
 
如果你只有一个线程的话,在 OnTimer 事件中你不改 S 的值,
当然也不会有别的代码去改变 S。
 
里面你就用一局部变量去取得S的值用局部变量进行计算,就不会改变S的值了。
 
用两个全局变量S1,S2,S1可以被ontimer外的其他代码修改,进入onTimer事件后用
S2:=S1,在ontimer事件中都用s2,这样当外部改变S1时就不会影响S2了.
 
用临界sendlock:Tcriticalsection;
socketsendlock.Enter;
你的代码
socketsendlock.Leave;
 
to yanghai0437, kkyy,
timer每次刷新都要执行s2:=s1地,当S1被改变时,S2不也被改了??

to honestman,
可以说详细点吗?看不懂啊

多谢
 
只要不在OnTimer事件中改变全局变量的值不就行了?
只在外面改变它
 
to xianjun,

首选我要把值传进来
procedure TForm1.Ontimer(sender:
var
s2:string;
begin
s2:=s1;//timer每次刷新都要执行这一句地,如果S1的值改变了,S2不也就改变了吗?
有什么办法使这一句只执行一次吗?
 
加一个标志位:
if flag = 0 then begin s2:=s1; flag = 1 end
不就执行一次了

 
唉, 離開一下就給dz2050回答了, 是的, 同意dz2050
 
接受答案了.
 
to dz2050,

还我分来

我加思索就给分了,但是我试过后发现不行,Timer每次刷新都会把变量复位地,也就是说
上面代码的 flag就为0了

to alextsui,
快来帮帮我

to all
都进来吧
又开一题,还是100分,不够再加

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1391315
 
顶部