synchronize的作用(100分)

  • 主题发起人 主题发起人 shilei525918
  • 开始时间 开始时间
S

shilei525918

Unregistered / Unconfirmed
GUEST, unregistred user!
线程中的 synchronize 的作用是什么,谁能给个详细的解释
 
synchronize 作用是让线程的一些方法在在主线程中执行,一般用于与VCL同步。
 
VCL是非线程安全的,所以Borland提供了一个synchronize,让你能够在线程中放心的调用VCL,也就是说,synchronize中的所有内容都是在主线程中执行(而不是在线程中,废话),很安全,但效率也很低。
 
synchronize是通过主窗体的消息机制实现对其参数指定函数的同步调用,因为主窗体消息是串行执行的(一个消息代码执行结束后才进入另外一个消息代码的处理),所以可以避免出现对窗体中的可视组件的同时操作,一般只用于线程中操作窗体中的显示控件。
 
就是给主线程发个消息,让主线程执行完子线程中指定的函数后再返回一个消息。
 
synchronize好像主要用来调用线程中的方法过程,
俺也是刚学这个,
帮楼主顶下,
 
多个线程同时访问VCL(窗体上的控件等)会出问题。
把代码放在Synchronize中,Delphi就可以将访问VCL的顺序错开(实际上是串行地访问VCL)这样避免了上述问题。
也由于这个特性,不要在Synchronize中放太多业务代码,一般线程中的业务结束以后Synchronize显示一下即可,否则界面会假死
 
受教了 昨天的迷惑想不到今天就解决了
 
那就放分吧,hiahia
 
既然 "synchronize 作用是让线程的一些方法在在主线程中执行,一般用于与VCL同步。"
(试过,确实是这个样子);
我想问一下,如何真正的实现多线程的同步?举个例子: foxmail中多个帐户的邮件接收就是多线程同步,并且调用同一个提示窗体,它们是同步接收,我也想实现这中效果,但是我用synchronize就会一个接收完后另一个接收,如何实现foxmail的那种效果?盼高手做答.
 
呵呵,
1.MainForm里可以创建X个线程分别接收X个邮箱的邮件
2.MainForm创建线程是瞬间返回的
3.X个线程分头工作,业务处理完的时候(或者进度++的时候),synchronize到主窗体上显示一些信息
这样编写,看起来就是同时接收,只是显示的时候总得有先有后吧-_-,就是你要的效果了
 
谢谢 VictorWoo
 
后退
顶部