G gemmy Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-18 #1 比如,每個線程都要訪問主界面的stringGrid控件但不對它進行編寫
G gemmy Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-18 #4 可以在線程中這樣訪問嗎 GetGridColRow(formServerMain.SelectCondGrid.Cells[2,i],formServerMain.SelectCondGrid.Cells[0,i],formServerMain.SelectCondGrid.Cells[1,i],RecordCount);
可以在線程中這樣訪問嗎 GetGridColRow(formServerMain.SelectCondGrid.Cells[2,i],formServerMain.SelectCondGrid.Cells[0,i],formServerMain.SelectCondGrid.Cells[1,i],RecordCount);
V vine Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-18 #5 用synchronize()方法来 这个方法会做一些工作,把传入的方法交由主线程来执行
G gemmy Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-18 #6 不用synchronize()方法可以去訪問主界面的控件嗎
G gemmy Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-18 #9 再問一下 如果用synchronize()方法,我多個線程都這樣做 那麼這幾個線程都是同步執行的嗎
N nickong Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-26 #10 gemmy, 别急揭帖, 我也顺便问问! 各位大哥! 比如我的主窗体中有个OLE Container, 我可以创建线程去读数据库, 然后将数据库返回的值读到OLE中,这可以实现吗?给我肯定的回答! 可以或不可以!谢谢!
gemmy, 别急揭帖, 我也顺便问问! 各位大哥! 比如我的主窗体中有个OLE Container, 我可以创建线程去读数据库, 然后将数据库返回的值读到OLE中,这可以实现吗?给我肯定的回答! 可以或不可以!谢谢!
N nickong Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-26 #11 gemmy, 我正在看的《delphi in a nutshell》中的一段代码显示(P117),是可以这么做的! 比如并行打印,可以有: begin Synchronize(PrintHeader); Synchronize(PrintFooter); end; 意即:并行打印文档页头和页脚!
gemmy, 我正在看的《delphi in a nutshell》中的一段代码显示(P117),是可以这么做的! 比如并行打印,可以有: begin Synchronize(PrintHeader); Synchronize(PrintFooter); end; 意即:并行打印文档页头和页脚!
B barton Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-26 #12 有关线程,我谈点看法。 对于大多数非可视控件,线程可以并行安全操作。读写Canvas的VCL通过锁定Canvas来实现 多线程的访问,但是事实上一个线程在访问的时候,另一个线程处于等待状态。实现这种 访问的控制并不需要通过Synchrinize来实现,而是Canvas自己带一个同步对象,实现重入 限制。Synchrinize只能保证同类型的多个实例不会同时执行某个过程,并不能实现多个不 同类线程间的同步控制。 数据库访问应该尽可能避免在线程中访问。Delphi中的TDataset并不是线程安全的,它对 线程的限制比VCL还严格。所以大多数数据库引擎中自己带有同步机制,保证多线程间的同 步。不过,大家知道,应用程序消息循环总是单线程的,基于这个原因,我总是直接通过 消息来同步,又方便又安全。如果是要求即时应答,线程通过SendMessage向父窗口发送消 息,否则通过PostMessage向父窗口发送消息,这样,线程通过PeekMessage循环获得父窗 口返回的消息,必要时还可以在线程中加入事件机制实现线程安全。
有关线程,我谈点看法。 对于大多数非可视控件,线程可以并行安全操作。读写Canvas的VCL通过锁定Canvas来实现 多线程的访问,但是事实上一个线程在访问的时候,另一个线程处于等待状态。实现这种 访问的控制并不需要通过Synchrinize来实现,而是Canvas自己带一个同步对象,实现重入 限制。Synchrinize只能保证同类型的多个实例不会同时执行某个过程,并不能实现多个不 同类线程间的同步控制。 数据库访问应该尽可能避免在线程中访问。Delphi中的TDataset并不是线程安全的,它对 线程的限制比VCL还严格。所以大多数数据库引擎中自己带有同步机制,保证多线程间的同 步。不过,大家知道,应用程序消息循环总是单线程的,基于这个原因,我总是直接通过 消息来同步,又方便又安全。如果是要求即时应答,线程通过SendMessage向父窗口发送消 息,否则通过PostMessage向父窗口发送消息,这样,线程通过PeekMessage循环获得父窗 口返回的消息,必要时还可以在线程中加入事件机制实现线程安全。
V vine Unregistered / Unconfirmed GUEST, unregistred user! 2003-02-26 #13 在<DELPHI技术手册>中有比较清楚的说明。 我一时也想不完整 意思就是Synchronize是一个黑箱 由Synchronize()传入的过程会由一个什么操作来发送到 主线程中来执行。 所以: >如果用synchronize()方法,我多個線程都這樣做 >那麼這幾個線程都是同步執行的嗎 还是有一定的执行顺序的。 在<D5开发人员指南>上也有说明!
在<DELPHI技术手册>中有比较清楚的说明。 我一时也想不完整 意思就是Synchronize是一个黑箱 由Synchronize()传入的过程会由一个什么操作来发送到 主线程中来执行。 所以: >如果用synchronize()方法,我多個線程都這樣做 >那麼這幾個線程都是同步執行的嗎 还是有一定的执行顺序的。 在<D5开发人员指南>上也有说明!
S shenjian Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-26 #14 非常赞同barton的看法,对界面控件和非界面控件的交互部分最好使用消息驱动的方式,使用多线程访问界面你不是绝对的高手,你是难以驾驭的。而且通常你那样做反而容易破坏程序良好的结构,导致界面部分和下面捆的很紧。
非常赞同barton的看法,对界面控件和非界面控件的交互部分最好使用消息驱动的方式,使用多线程访问界面你不是绝对的高手,你是难以驾驭的。而且通常你那样做反而容易破坏程序良好的结构,导致界面部分和下面捆的很紧。