about Tthread 的问题(50分)

C

C A D

Unregistered / Unconfirmed
GUEST, unregistred user!
TThread.Execute 在 delphi的帮助中有:
Note:
Do not use the properties and methods of other objects directly in the Execute method of a thread.
Instead,separate the use of other objects into a separate procedure call,
and call that procedure by passing it as a parameter to the Synchronize method

不太理解.

这个'a separate procedure' 可否是 mythread对象的过程,?如果可以,那直接在Execute中调用该过程
是不是已表明它与mythread同步(还需调用Synchronize(该过程))?

请大侠指点迷津
 
当然可以是TThread的方法,它上边那段话的意思无非是说当Excecute中的代码关联到
VCL对象的操作时必须分离成一个单独的方法用Synchronize同步,因为牵扯到VCL对象的
代码从线程的角度讲已经访问了其他的线程了(VCL第层操作线程),为防止死锁等线程易
出现的其他难题所以用Synchronize同步。
注意:如果方法没有VCL对象的操作不必用Synchronize同步。
 
Delphi6的Demos/Threads下有一个很好的例子,你可以琢磨琢磨。
 
涉及到VCL的时候用Synchronize同步,另外可以直接用Sendmessage来控制vcl的属性,将
线程和进程消息列队同步!
 
to YFeral:
在Execute里我有多个过程涉及到vcl对象的属性,那如何Synchronize,(合成一个过程?)

to 爱元元的哥哥(另外可以直接用Sendmessage来控制vcl的属性):
是否理解为Synchronize(Sendmessage),然后通过捕获发送的消息来改变vcl属性?
 
对,当然可以合成一个,但你多用synchronize也不为过。
这种情况你最好看一些好的例子,尽量少用Synchronize.
好象不用同步SendMessage,你同步消息响应过程应该比较合适。
 
顶部