我使用Synchronize()C++ Builder 2010中的方法测试了以下代码:
while(true) {}
CreateDirectory ("D:\\test", NULL);
Run Code Online (Sandbox Code Playgroud)
发生了什么是UI冻结,并且没有创建文件夹.这是否意味着Synchronize()将代码传递给UI线程来执行它,然后等待代码执行后再继续?
编辑:
我错误地解释了我在测试代码中所做的事情.我真正做的是以下内容:
我打电话Synchronize()给以下代码:
while(true) {}
Run Code Online (Sandbox Code Playgroud)
在打电话之后Synchronize(),我有以下代码:
CreateDirectory ("D:\\test", NULL);
Run Code Online (Sandbox Code Playgroud)
这是否意味着Synchronize()将代码传递给UI线程来执行它,然后等待代码执行后再继续?
是.事实上,这在文档中有所描述:
在主线程中执行方法调用.
Synchronize导致使用主线程执行AMethod指定的调用,从而避免多线程冲突.AThread参数与调用者线程相关联.
对于静态方法,您可以使用AThread参数将AMethod与任何线程相关联.此外,如果您不需要知道主线程中调用者线程的信息,则可以使用nil/NULL作为AThread参数.
在当前实现中,Synchronize方法可以使用关联的线程信息来唤醒Windows平台上的主线程.
如果您不确定方法调用是否是线程安全的,请从Synchronize方法中调用它以确保它在主线程中执行.
当方法在主线程中执行时,暂停执行当前线程.
因此,无限循环会阻塞主线程.确实是工人的话题.
| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |