TO: belllab(菜鸟) qzxyd(只会种菜) 通过Synchronize,可以将子线程要执行代码通过消息传递给主线程,由主线程来执行,这样的话,这段代码就不是子线程代码,而是一般的主线程代码。我的系统就是因为一段打印的代码执行速度特别慢,所以建立子线程,使用了Synchronize,是不可以的。
TO: aiirii(ari-淘金坑) 同意你的看法。 ----------------------------------------- 不包括主线程,如果两个或者更多个线程,我觉得在访问同一资源的时候Synchronize要用。 否则可以不用。
我以前类似的项目中,我是在线程中 postMessage 一条消息给主窗口,让主窗口去更新自己的控件
理论上要,实际上,可以不,你可以自己试验下
>>线程不安全会引起什么样的后果?
非法操作,程序自己退出
belllab(菜鸟)
qzxyd(只会种菜) 通过Synchronize,可以将子线程要执行代码通过消息传递给主线程,由主线程来执行,这样的话,这段代码就不是子线程代码,而是一般的主线程代码。我的系统就是因为一段打印的代码执行速度特别慢,所以建立子线程,使用了Synchronize,是不可以的。
-----------------------------------------
不包括主线程,如果两个或者更多个线程,我觉得在访问同一资源的时候Synchronize要用。
否则可以不用。
(1) 锁定对象:有些对象自己有锁定的功能,如canvas
(2) 使用critical有提高内置的锁定功能,区
如果对象没需要使用critical区,Critical区在同一个时间只也许一个线程进入。为了使用Critical区,产生一个TCriticalSection全局的实例。TcriticalSection有两个方法,Acquire(阻止其他线程执行该区域)和Release(取消阻止) 每个Critical区是与你想要保护的全局内存相关联。每个访问全局内存的线程必须首先使用Acquire来保证没有其他线程使用它。完成以后,线程调用Release方法,让其他线程也可以通过调用Acquire来使用这块全局内存。 警告:Critical区只有在所有的线程都使用它来访问全局内存,如果有线程直接调用内存,而不通过Acquire,会造成同时访问的问题。例如:LockXY是一个全局的Critical区变量。任何一个访问全局X, Y的变量的线程,在访问前,都必须使用Acquire