我正在尝试使用自己的C ++类与作为STA的COM库进行交互。
我们要解决的问题是第三方应用程序设置了STA属性。然后,应用程序创建我们创建的C ++服务,其他服务(在我们的例子中是WCF服务)正在修改由第三方STA属性应用程序创建的服务中的元素。本质上我们有来自STA应用程序的Thread1来创建服务,然后是来自WCF的Thread2 ... N,它不在STA线程状态中操纵服务中保存的数据。 STA应用程序没有看到更改的数据,并且表现得好像没有发生任何事情。
因此,为了解决这个问题,我想我必须确保我的服务中包含的所有操作都需要保证在同一个线程上运行。我的问题是如何实现这一目标。
我将展示我们当前代码的示例。
当前服务(每个方法都需要在最初创建的同一个线程上调用)
MyService::MyService()
{
// creates some objects and maybe some other initializing
// Whatever thread (the STA application in this case) this was
// created on needs to be used on all methods, how?
}
ObjectA MyService::GetObject()
{
return anObject;
}
ObjectB MyService::CreateObjectB()
{
// Do some tasks that eventually create object
object = new ObjectB();
return object;
}
void MyService::SomeVoidFunction()
{
// Do some work
}
我不确定我是否可以利用TPL并执行此操作,或者我是否需要使用ThreadPools或类似的东西?