关于线程的Synchronize()

raichy2002 2003-12-05 11:35:18
我在线程里面的Synchronize(Func)的Fuc函数中对主界面上的两个Vcl控件进行了信息更新,但是奇怪的是只有一个有反映,另一个就死活没反应,不知道是不是Func里面只能对一个Vcl进行通信呢?
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
南郁 2003-12-15
  • 打赏
  • 举报
回复
你先在这一句设置一个断点:

Form1->Label1->Caption=Time

并点设置它的断点条件为 每2000次中断一次.然后观察 Time 是不是有变化.
如果没有变化,说明是你的代码中还有其它的逻辑出错.

如果有变化.那么你的程序逻辑是正确的.可能只是没有刷新而已,改成:
Thread::Form()
{
Form1->Label1->Caption=FloatToStr(Time);
Form1->Label->Refresh();
//Application->ProcessMessages(); 如果还不行,把这句也加上.
}

另外,Time变量入在Thread类里,做个私有变量是不是比较好? 如果在Thread类里其它地方并不用到Time,那就直接加入到 Form类里.在那里头得到 Now();
raichy2002 2003-12-05
  • 打赏
  • 举报
回复
我写段代码类似这样
Public:
double Time;
Thread::Execute()
{

......
while(....)
{
Time=Now();
Synchronize(Form);
}
}
Thread::Form()
{
Form1->Label1->Caption=Time

}
但是调试程序发现Time的值只有第一次传到了Form这个函数中,以后的每次条用Form函数Time还是用的以前的值没有改变,各位这是为什么,难道Time的值不能刷新么?
aliker 2003-12-05
  • 打赏
  • 举报
回复
把代码贴出来
南郁 2003-12-05
  • 打赏
  • 举报
回复
Func 里可以多任意多个VCL控件进行界面刷新.
所以可能还是你的那段代码有些问题.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧