delphi 多线程编程问题
我在线程单元中的Execute中直接更新主窗体中的变量与在线程中调用Synchronize函数更新主窗体中的变量有何区别?我直接在Execute中更新我看也可以呀,为什么...
我在线程单元中的 Execute 中直接更新主窗体中的变量
与在线程中调用Synchronize 函数更新主窗体中的变量有何区别?我直接在Execute 中更新我看也可以呀,为什么一定要在线程的Execute 调用Synchronize 来更新呢? 展开
与在线程中调用Synchronize 函数更新主窗体中的变量有何区别?我直接在Execute 中更新我看也可以呀,为什么一定要在线程的Execute 调用Synchronize 来更新呢? 展开
3个回答
展开全部
多线程中使用方法注意以下几点就可以了!
1.在更新VCL控件的时候使用Synchronize.
2.如果线程内定义了全局变量,如果想修改它的话,一般常用临界,如果是多进程方式同步的话使用互斥等....
3.你所说的使用synchonrize和不使用synchronize结果一样,没有什么区别.!这是在单个线程中没有发现问题,如果多个线程同时运行此段代码就会出现内存写入和读取错误了!
1.在更新VCL控件的时候使用Synchronize.
2.如果线程内定义了全局变量,如果想修改它的话,一般常用临界,如果是多进程方式同步的话使用互斥等....
3.你所说的使用synchonrize和不使用synchronize结果一样,没有什么区别.!这是在单个线程中没有发现问题,如果多个线程同时运行此段代码就会出现内存写入和读取错误了!
更多追问追答
追问
首先我在我的程序里面只建立了一个线程单元,如果我在线程中的定义函数a 调用别的单元或窗体中的ADOConnection,然后再进行对数据库的查找,根据查找情况,在线程的Execute中直接对别的窗体中的edit 内容进行更新。这样做合适吗?
追答
不合适,我上边说过了,操作VCL控件要用Synchronize,如果不想用可以自定义消息也行!
在对数据库查找的时候也要使用同步.
展开全部
我最近写的软件里就用到了多线程,其实你要是只更新主窗体中的变量,不用Synchronize直接就行 ,但要是想更新主窗体中的控件时,最好就用Synchronize才不会出问题...
还可以用 CS: TCriticalSection; 来控制同步.
还可以用 CS: TCriticalSection; 来控制同步.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议用线程类吧,子线程与主程序之间用消息进行勾通。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询