Re: MTA, STA show no change in concurency
Thanks for quick response.
Wizard shows 4 types of threading models, I tried with all just
because nothing seemed to make difference at all.
1) I stepped in to ATL implementation, RegisterClassObjects() is
being passed following...
hr = RegisterClassObjects( ,4 /*CLSCTX_LOCAL_SERVER*/, 1 /
*REGCLS_MULTIPLEUSE*/ )
2) Ctor of CAtlExeModuleT() calls CoInitialize() and could not step in
to exact line using debugger.
Then I added _WIN32_DCOM & _ATL_FREE_THREADED defines. But this did
not change anything.
CAtlExeModuleT()
{
HRESULT hr = T::InitializeCom(); //Debugger did not go inside.
}
static HRESULT InitializeCom() throw()
{
#if ((_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)) & defined
(_ATL_FREE_THREADED)
return CoInitializeEx(NULL, COINIT_MULTITHREADED);
#else
return CoInitialize(NULL);
#endif
}
4)
I also tried calling CoInitialize(MULT...) from main() and that also
did not bring any change to behaviour.
CAtlFreeModule _AtlModule;
extern "C" int WINAPI _tWinMain(HINSTANCE, , LPTSTR, int nShowCmd)
{
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED); //Did not
change threading behaviour at all.
return _AtlModule.WinMain(nShowCmd);
}
Rgs file does not talk about threading model.
Do you see anything wrong in my approch, outside of COM, like the way
threads are being launched etc?
I have tried to simulate, how we would like it to work in the end,
have difference instances of COM objects serve incoming requests
parallely.
Regards,
Ramesh
On Aug 7, 7:21 am, "Igor Tandetnik" <itandet...@mvps.org> wrote:
asnowf...@gmail.com wrote:
This is something I had not expected, hope I am doing something really
wrong. I have 4 ATL out-proc test-sample servers (STA, MTA, BOTH,
FREE)
There ain't no such thing as BOTH or FREE for out-of-proc servers. The
threading model of such server is not determined by registry settings or
anything like that. Instead, the model of each object implemented by an
out-of-proc server is determined by which apartment calls
CoRegisterClassObject for it.
Show how you call CoRegisterClassObject (probably indirectly via
CAtlExeModuleT::RegisterClassObjects), and how you initialize COM before
doing so.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925