Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 表单在单独线程中加载数据时被冻结_Multithreading_Http_Thread Safety_C++builder_Indy - Fatal编程技术网

Multithreading 表单在单独线程中加载数据时被冻结

Multithreading 表单在单独线程中加载数据时被冻结,multithreading,http,thread-safety,c++builder,indy,Multithreading,Http,Thread Safety,C++builder,Indy,我使用TIdHTTP组件在一个单独的线程中从银行加载xml数据,但在此期间我的表单被冻结 有什么问题吗 我有一个主窗体和线程类,在线程类中我有一个名为loadData的方法,在thread::Execute I Synchronize(loadData)上 当点击按钮时,我创建了线程类的实例,比如testThread*t=newtestthread(false) 就这些 当我点击按钮时,主窗体冻结? 即使是分开的线也没用 请帮忙 Synchronize()正在主线程的上下文而不是工作线程的上下文

我使用TIdHTTP组件在一个单独的线程中从银行加载xml数据,但在此期间我的表单被冻结

有什么问题吗

我有一个主窗体和线程类,在线程类中我有一个名为loadData的方法,在thread::Execute I Synchronize(loadData)上

当点击按钮时,我创建了线程类的实例,比如testThread*t=newtestthread(false)

就这些

当我点击按钮时,主窗体冻结? 即使是分开的线也没用


请帮忙

Synchronize()
正在主线程的上下文而不是工作线程的上下文中运行
loadData()
方法。这就是为什么主线程在
loadData()
忙时阻塞的原因。您误用了
Synchronize()
,使线程变得无用。您需要在
Synchronize()
之外完成大部分线程工作,然后在需要时使用
Synchronize()
仅在主线程中执行小的更新,例如显示状态(即使如此,
Synchronize()
也不总是最好的选择)。

嗨,雷米!我是否需要简单地调用loadData()方法而不是Synchronize(loadData);对仅当需要在主线程而不是工作线程中运行代码时才使用
Synchronize()
。AFAIK Synchronize用于更新VCL组件的状态,我称之为loadData();在执行事件时,网格没有显示任何内容???是的,
Synchronize()
需要在需要时用于更新网格。不驱动整个
loadData()
逻辑。