O
op
Unregistered / Unconfirmed
GUEST, unregistred user!
COM服务端:
用[File]->[New...]->[ActiveX]->[Automation Object]建立COM服务端,选择Apartment线程模式。
新建COM对象:Test
新建COM接口:ITest
新建ITest接口的方法:ITest->GetID(int* AThreadID,int* AInstanceID);
//AThreadID返回线程ID,用GetCurrentThreadID()获得;
//AInstanceID返回实例ID,用int(this)获得;
COM客户端:
IUnknown* pUnknown;
ITest* pTest;
CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
// 这里表明是Apartment线程模式了。
CoCreateInstance(CLSID_Test,NULL,CLSCTX_ALL,IID_IUnknown,(void**)&pUnknown);
pUnknown->QueryInterface(IID_ITest,(void**)&pTest);
pUnknown->Release();
//以上获得了pTest。
DWORD ThreadID,InstanceID;
pTest->GetID(&ThreadID,&InstanceID);
ShowMessage(IntToStr(ThreadID)+" "+IntToStr(InstanceID));
//以上显示了COM服务端的ThreadID,InstanceID
CoUninitialize();
我运行多个客户端,得到的结果是: ThreadID 相同,InstanceID不同,这表明服务端是单线程。
我认为客户端应该没问题,因为有COINIT_APARTMENTTHREADED在。
问题可能出在服务端。
请问当多个客户端连上来时,服务端如何产生多个Apartment来服务这些客户端?
我知道Delhpi 5 默认就能实现多线程,但C++Builder 5不同,到底应该加哪些代码?
用[File]->[New...]->[ActiveX]->[Automation Object]建立COM服务端,选择Apartment线程模式。
新建COM对象:Test
新建COM接口:ITest
新建ITest接口的方法:ITest->GetID(int* AThreadID,int* AInstanceID);
//AThreadID返回线程ID,用GetCurrentThreadID()获得;
//AInstanceID返回实例ID,用int(this)获得;
COM客户端:
IUnknown* pUnknown;
ITest* pTest;
CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
// 这里表明是Apartment线程模式了。
CoCreateInstance(CLSID_Test,NULL,CLSCTX_ALL,IID_IUnknown,(void**)&pUnknown);
pUnknown->QueryInterface(IID_ITest,(void**)&pTest);
pUnknown->Release();
//以上获得了pTest。
DWORD ThreadID,InstanceID;
pTest->GetID(&ThreadID,&InstanceID);
ShowMessage(IntToStr(ThreadID)+" "+IntToStr(InstanceID));
//以上显示了COM服务端的ThreadID,InstanceID
CoUninitialize();
我运行多个客户端,得到的结果是: ThreadID 相同,InstanceID不同,这表明服务端是单线程。
我认为客户端应该没问题,因为有COINIT_APARTMENTTHREADED在。
问题可能出在服务端。
请问当多个客户端连上来时,服务端如何产生多个Apartment来服务这些客户端?
我知道Delhpi 5 默认就能实现多线程,但C++Builder 5不同,到底应该加哪些代码?