书上说VCL的线程同一时间只能由一个主线程访问,这样做是为了线程安全。所用的方法为synchronize,我想问的问题是
1.synochronize穿的是地址,由主线程调用,其实还是穿递的消息,是否可以认为和回调函数差不多。
2.如何区分函数是在主线程里跑还是在附加线程里跑啊。我如果写一个附加线程,点button,后create(false),它是否可以视为是主线程发消息导致在附加线程里跑?这个和1有什么区别啊。
3.我在一个VCL里放一个BUTTON,点击后将VCL里的EDIT.TEXT放入附加线程对象属性,然后再点另个BUTTON将附件线程的属性值直接存入VCL里的另个EDITE.TEXT.这样结果是可行的.再点VCL的第二个BUTTON时,附加线程是在独立线程里跑吗?还是在VCL里的主线程跑。实际上并没有报错。不用synchronize也可以。

解决方案 »

  1.   

    button 可能出现的是重绘的问题。消息机制与  synchronize 采用的互斥还是有区别的,虽然目的一样。
      

  2.   

    更正下: synchronize    用的是临界区。 唉,现在是什么也记不住了。
      

  3.   

    1 传的是地址,但是它是保存在一全局LIST列表中,synochronize然后判断是主线程ID,通过一全局变量
    WakeMainThread 发送WM_NULL 消息,然后消息响应, 从全部列表中取出事件执行, 和回调没什么关系
    2 根据判断线程ID与MainThreadID 是全局变量,可以直接取出的
    3 VCL线程不安全,不是一操作就会报错的