zoukankan      html  css  js  c++  java
  • com线程模型实验

    创建一个对话框应用程序进行测试

    主线程代码

    CoInitialize( NULL);
    {
        CString str;
        str.Format(L"threadid:%d ,msg:%d", GetCurrentThreadId(), GetCurrentThreadId());
        MessageBox( str, str, MB_OK);

        ITestShowMsgPtr ptrMsg;
        HRESULT hr = ptrMsg.CreateInstance( __uuidof(TestShowMsg));
        ptrMsg->ShowMsg( _bstr_t(L"My Message"));
    }

    _beginthreadex( NULL, 0, _ThreadShowMessage, NULL, 0, NULL);

    另外一个线程代码

    UINT __stdcall _ThreadShowMessage( LPVOID pParam)
    {

        CString str;
        str.Format(L"threadid:%d ,msg:%d", GetCurrentThreadId(), GetCurrentThreadId());
        MessageBox(NULL, str, str, MB_OK);

        CoInitialize( NULL);
        ITestShowMsgPtr ptrMsg;
        HRESULT hr = ptrMsg.CreateInstance( __uuidof(TestShowMsg));
        ptrMsg->ShowMsg( _bstr_t(L"My Message"));

        return 0;
    }

     

    COM类型为Apartment

    -------------------------------------------------------------------------------------

    第一种情况 线程1使用CoInitialize( NULL),线程2使用CoInitialize( NULL)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:1,线程2的ID:2,线程2调用COM接口执行的线程ID:2

    第二种情况 线程1使用CoInitializeEx(NULL, COINIT_MULTITHREADED),线程2使用CoInitialize( NULL)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:2,线程2的ID:3,线程2调用COM接口执行的线程ID:3

    第三种情况 线程1使用CoInitializeEx(NULL, COINIT_MULTITHREADED),线程2使用CoInitializeEx(NULL, COINIT_MULTITHREADED)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:2,线程2的ID:3,线程2调用COM接口执行的线程ID:2

    COM类型为Single

    -------------------------------------------------------------------------------------

    第一种情况 线程1使用CoInitialize( NULL),线程2使用CoInitialize( NULL)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:1,线程2的ID:2,线程2调用COM接口执行的线程ID:1

    第二种情况 线程1使用CoInitializeEx(NULL, COINIT_MULTITHREADED),线程2使用CoInitialize( NULL)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:2,线程2的ID:3,线程2调用COM接口执行的线程ID:2

    第三种情况 线程1使用CoInitializeEx(NULL, COINIT_MULTITHREADED),线程2使用CoInitializeEx(NULL, COINIT_MULTITHREADED)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:2,线程2的ID:3,线程2调用COM接口执行的线程ID:2

    COM类型为Free

    -------------------------------------------------------------------------------------

    第一种情况 线程1使用CoInitialize( NULL),线程2使用CoInitialize( NULL)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:2,线程2的ID:3,线程2调用COM接口执行的线程ID:2

    第二种情况 线程1使用CoInitializeEx(NULL, COINIT_MULTITHREADED),线程2使用CoInitialize( NULL)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:1,线程2的ID:2,线程2调用COM接口执行的线程ID:3

    第三种情况 线程1使用CoInitializeEx(NULL, COINIT_MULTITHREADED),线程2使用CoInitializeEx(NULL, COINIT_MULTITHREADED)初始化主线程套件,COM类型为单元。

    执行结果:线程1ID:1,线程1调用COM接口执行的线程ID:1,线程2的ID:2,线程2调用COM接口执行的线程ID:2

    待续。。。

  • 相关阅读:
    线程池
    单例设计模式
    String,StringBuffer,StringBuilder
    马踏棋盘算法
    最短路径问题 (迪杰斯特拉算法,弗洛伊德算法)
    最小生成树 修路问题(普里姆算法,克鲁斯卡尔算法)
    贪心算法 求解集合覆盖问题
    Stream 数组转换
    unittest与pytest对比
    条件编译
  • 原文地址:https://www.cnblogs.com/sosopop/p/1766801.html
Copyright © 2011-2022 走看看