Маршаллинг потока в библиотеку COM STA

Я относительно новичок в COM и использую библиотеку параллельных задач, так что не обращайте на меня внимания, если я ошибаюсь в некоторых понятиях. Я пытаюсь использовать свой собственный класс C ++ для взаимодействия с библиотекой COM, которая является STA.

Проблема, которую мы пытаемся решить, заключается в том, что стороннему приложению установлен атрибут STA. Затем приложение создает созданный нами сервис C ++, а другие сервисы (в нашем случае сервис WCF) модифицируют элементы в сервисе, созданном сторонним приложением атрибутов STA. По сути, у нас есть Thread1, поступающий из приложения STA, которое создает службу, а затем Thread2 … N, поступающий из WCF, который не находится в состоянии потока 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 или что-то подобное?

Если у вас есть дополнительные вопросы, пожалуйста, дайте мне знать, и я отвечу на них как можно скорее. Спасибо!

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]