COM元件的多執行緒測試-Apartment模型 (轉)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- COM元件的多執行緒測試-Apartment模型(附錄) (轉)元件執行緒模型
- COM元件中的執行緒模式 (轉)元件執行緒模式
- 泛說 "COM執行緒模型" (轉)執行緒模型
- 有關Junit的多執行緒測試執行緒
- pytest多程式/多執行緒執行測試用例執行緒
- 怪異的COM 執行緒模型執行緒模型
- 多執行緒之共享模型執行緒模型
- COM套間和執行緒模型.執行緒模型
- 多執行緒伺服器壓力測試執行緒伺服器
- 開源多執行緒效能測試工具-sysbench執行緒
- java執行緒測試Java執行緒
- Java多執行緒20:多執行緒下的其他元件之CountDownLatch、Semaphore、ExchangerJava執行緒元件CountDownLatch
- 多執行緒和多程式模型的選用執行緒模型
- Python多執行緒併發的簡單測試Python執行緒
- Java語言深入 多執行緒程式模型研究(轉)Java執行緒模型
- Muduo 多執行緒模型對比執行緒模型
- TestNg之XMl形式實現多執行緒測試XML執行緒
- 測試小花花重口味java多執行緒,慎入。。。。。Java執行緒
- 多執行緒、重疊I/O的通訊埠元件 (轉)執行緒元件
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- python進階(15)多執行緒與多程式效率測試Python執行緒
- Java多執行緒記憶體模型Java執行緒記憶體模型
- three.js 中使用多執行緒以及效能測試JS執行緒
- 關於多執行緒(轉)執行緒
- 多執行緒和多執行緒同步執行緒
- Java多執行緒21:多執行緒下的其他元件之CyclicBarrier、Callable、Future和FutureTaskJava執行緒元件
- JAVA 的多執行緒淺析(轉)Java執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒
- 多執行緒-多執行緒常見的面試題執行緒面試題
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒與多執行緒執行緒
- 執行緒模型執行緒模型
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- VC多執行緒 C++ 多執行緒執行緒C++
- 自動化測試應該如何實現多執行緒?執行緒
- Java多執行緒之記憶體模型Java執行緒記憶體模型