我目前正在开发一个简单的ActiveX控件。该控件公开了一小组属性和方法。目前还不确定ActiveX方法是否会从不同的线程调用。 为了准备应对这种情况,我决定在控件公开的每个方法中实现线程同步。 我需要实现这种同步吗?或者Microsoft ActiveX框架已经实现了它? 我这样做是不是多余的?
我目前正在开发一个简单的ActiveX控件。该控件公开了一小组属性和方法。目前还不确定ActiveX方法是否会从不同的线程调用。 为了准备应对这种情况,我决定在控件公开的每个方法中实现线程同步。 我需要实现这种同步吗?或者Microsoft ActiveX框架已经实现了它? 我这样做是不是多余的?
这取决于您的控件使用哪种线程模型,但假设您的ActiveX控件使用“APARTMENT”线程模型(它几乎总是应该使用),则可以假定您的ActiveX控件上的所有方法都将在同一线程上调用。如果其他线程访问它们,则ActiveX会自动将调用传递到正确的线程,以便您在该线程上接收它。
同样,您绝不能从除了获取它的线程之外的线程上调用ActiveX对象或COM接口。如果您需要从多个线程进行调用,有方法可以实现,但这超出了本问题的范围。
总结:您不必担心方法被不同的线程调用,因此您不应该担心同步。