非常急!问有关TremoteDatamodule! 200分(200分)

E

evon

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在 TremoteDatamodule的procedure 中
要异动 其他Form的VCL元件要注意哪些问题!
因为我在TremoteDatamodule中使用了Ttimer
在ONtimer事件中异动了MainForm 中的stringGrid
的资料会发生资料错乱的问题!
 
不会啊!你的代码看看!
 
应该没有问题的,是不是你搞错了?
 
不好意思!拖了那麽久才回应
事实上环境是这样的:
NT SERVER : 2 CPU &
WIN NT 4.0 +SP4.0
工作环境 : 我是利用 3-Tier 架构,由Client端传送一些资料至SERVER端
再由 TremoteDatamodule(Multi-thread)中的Ontimer事件
(Timer是Create在TremoteDatamodule上)
触发,异动了在MainForm 的StringGrid的资料。
由於异动的速度相当快,就会发生要填入在StringGrid的Column=2位置会被挪到 1
的位置,甚至有时候会出现乱码!
我调用的下面的作法,发生的情况就比较少了
---------------------------------Ontimer
entercriticalsection(Cs);
ReplaceGridData;
LeaveCriticalSection(Cs);
不过我想知道为什麽!(如果没有人回答这个问题,只好收回分数)
 
是不是因为取得的数据还没有显示完, 下面的数据就过来了, 导致的?
这样: ontimer:
timer1.enable:=false;
.....
timer1.enable:=true;
试试.
 
因该不是这个原因:(我想是不是有类似LOCK的理念)
这样也会只改变内容资料而已,我指的是位置跑错格
 
think like cytown said
which thread mode?
 
RemoteDataModule是在另一个线程中被创建并执行的,因此更新界面的话应该
放在Syncronize中,或者用CriticalSection强制同步!
另外,你的ONTIMER事件是RemoteDataModule的吗?这样的用法真奇怪,应该放在
MainForm中才对呀,这样应该没什么问题了!
 
EnterCriticalSection用一个指向CRITICAL_SECTION结构的指针做参数以锁定代码段,直到为这个代码段调用LeaveCriticalSection为止,这样一次只能有一个线程进入代码段。
正如zc说的,你的做法确实很奇怪,能将你的想法说的明白一点吗?
 
多人接受答案了。
 
顶部