COM元件的多執行緒測試-Apartment模型 (轉)

amyz發表於2007-08-14
COM元件的多執行緒測試-Apartment模型 (轉)[@more@]

COM的多執行緒測試-Apartment模型:namespace prefix = o ns = "urn:schemas--com::office" />

 

版本資訊:

版本

作者

修正/記錄

Ver 1.0

Zzyx

-5-16。建立

關鍵字:

多執行緒 執行緒模型 single Apartment CoInitialize CoInitializeEx

COINIT_APARTMENTTHREADED COINIT_APARTMENTTHREADED

測試

元件物件執行緒模型為Apartment。

元件程式碼:

STDMETHODIMP CTest2::Test(long nCnt)

{

  printf(" 物件Test2。所線上程ID:%d",GetCurrentThreadId());

  _tzset();

  char tmpbuf[128];

  _strtime( tmpbuf );

  printf( " 執行緒ID:%d,begin time: %s ", GetCurrentThreadId(),tmpbuf );

  Sleep(1000*nCnt);

  _strtime( tmpbuf );

  printf( " 執行緒ID:%d,end time: %s ", GetCurrentThreadId(),tmpbuf );

  return S_OK;

}

 

物件跨執行緒

測試方法:

客戶端建立一個物件例項,把該物件的指標傳遞給多個執行緒

每個執行緒中呼叫該例項的方法

觀察輸出結果

 

編號

客戶端COM環境

結果

心得

S1

NO

無法建立物件

 

S2

CoInitialize

同步

且物件的方法被建立的多個執行緒同步呼叫

從元件的角度看,需要管理執行緒同步

S3

CoInitializeEx

COINIT_APARTMENTTHREADED

同上

同上

S4

CoInitializeEx

COINIT_MULTITHREADED

順序執行

物件的方法被同一個執行緒順序呼叫

該執行緒為建立的

COM完成了執行緒同步的工作。

但如果是不同的方法呢?邏輯上應該也是同步的,未測試

 

多執行緒中物件例項呼叫

測試方法:

客戶端啟動多個執行緒

每個執行緒建立一個物件例項,呼叫該物件的方法。

觀察輸出結果。

 

測試結果如下:

主執行緒

COM環境

編號

執行緒COM

環境

執行結果

NO

T1

NO

無法建立物件

T2

CoInitialize

 

同時呼叫

每個執行緒都啟動

每個COM物件執行在各自的呼叫執行緒中

T3

CoIntializeEx

COINIT_APARTMENTTHREADED

同時呼叫

每個執行緒都啟動

每個COM物件執行在各自的呼叫執行緒中

T4

CoIntializeEx

COINIT_MULTITHREADED

注意:順序呼叫

每個執行緒都啟動

但物件都執行在另外的一個執行緒中,似乎是系統建立的

 

Yes

CoInitialize

T5

NO

無法建立物件

T6

CoInitialize

同T2

 

T7

CoIntializeEx

COINIT_APARTMENTTHREADED

同T2

T8

CoIntializeEx

COINIT_MULTITHREADED

!!!注意!!!

順序呼叫

每個執行緒都啟動

每個物件執行在相同的一個執行緒中,似乎是系統建立的

 

CoInitializeEx

COINIT_APARTMENTTHREADED

T9

NO

 

T10

CoInitialize

同T2

 

T11

CoIntializeEx

COINIT_APARTMENTTHREADED

同T2

 

T12

CoIntializeEx

COINIT_MULTITHREADED

同T8

 

CoInitializeEx

COINIT_MULTITHREADED

T13

NO

無法

T14

CoInitialize

同T2

T15

CoIntializeEx

COINIT_APARTMENTTHREADED

同T2

T16

CoIntializeEx

 COINIT_MULTITHREADED

同T8

 

輸出結果見附錄

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956710/,如需轉載,請註明出處,否則將追究法律責任。

相關文章