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

    待续。。。

  • 相关阅读:
    vue-cli3中热更新失效,修改完代码之后需要手动刷新页面才能看到改变,解决办法
    数组中的数据项包含逗号则需在首尾拼接中括号[]来区分每一项,最后数组转为字符串,以及数据恢复
    组件之间的拖拽
    工作心得
    Vue重点知识
    vue-router路由
    利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台
    db2 获取自增主键的方法
    mybatis注解@selectKey对于db2数据库的使用
    @InsertProvider 根据bean属性,自动生成插入sql语句
  • 原文地址:https://www.cnblogs.com/sosopop/p/1766801.html
Copyright © 2011-2022 走看看