C++ 在并行_for循环中使用COM对象,

C++ 在并行_for循环中使用COM对象,,c++,com,parallel-for,C++,Com,Parallel For,在我的代码中,我使用了一个并行的for循环,在这个循环中,我从COM对象进行调用,但是当它运行时,它没有正确执行,它说一些类似于不能在另一个线程中执行COM的东西 我需要做什么,我需要做什么 这是我的密码 COMObject myCom; parallel_for(long(1), count, [&](long i) { myCom->SomeCall(i); }); 我认为您需要设置MTAThreadAttribute[MTAThread]。有关更多信息,请参阅: 我

在我的代码中,我使用了一个并行的for循环,在这个循环中,我从COM对象进行调用,但是当它运行时,它没有正确执行,它说一些类似于不能在另一个线程中执行COM的东西

我需要做什么,我需要做什么

这是我的密码

COMObject myCom;
parallel_for(long(1), count, [&](long i)
{
    myCom->SomeCall(i);
});

我认为您需要设置MTAThreadAttribute[MTAThread]。有关更多信息,请参阅:


我认为您需要设置MTAThreadAttribute[MTAThread]。有关更多信息,请参阅:


您如何初始化COM?线程是否在初始化COM的
并行\u中运行?如果是,你是在使用
CoInitialize(NULL)
还是
coinitializex(NULL,COINIT\u APARTMENTTHREADED
?比如如果循环要执行10次,那么只执行3到4次(取决于它是同一个线程),我得到了正确的输出,在其他情况下没有,我尝试了CoInitialize(NULL),但仍然不起作用,以上所有原因都应该是此操作不起作用的原因。请尝试在每个线程(包括创建myCom的线程)上使用
coinitializex(NULL,COINIT\u multi threaded)
初始化COM。将该调用也放在lambda中-如果已经为该线程初始化了COM,则忽略该调用。myCom.CreateInstance(uuuIdof(Client),NULL,CLSCTX_LOCAL_SERVER);我这样做是为了初始化我的COM,我需要在这里做的是,我添加了CoInitialize(NULL)在parallel for内部,您是如何初始化COM的?线程是否在
parallel\u for
中运行初始化COM?如果是,您是使用
CoInitilize(NULL)
还是
coinitilizex(NULL,COINIT\u APARTMENTTHREADED
?比如,如果循环要执行10次,那么只执行3次或4次(取决于它是同一个线程)我得到了正确的输出,在其他情况下它没有,尝试了CoInitialize(NULL),但仍然不起作用,所有这些都应该是这不起作用的原因。尝试在每个线程(包括创建
myCom
的线程)上使用
CoInitializeX(NULL,Conit\u多线程)
初始化COM。将该调用也放在lambda内-如果已为该线程初始化COM,则会忽略该调用。myCom.CreateInstance(uuuIdof(Client),NULL,CLSCTX_LOCAL_SERVER);我这样做是为了初始化我的COM,我需要在这里做的是,我在parallel中为,