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

    待续。。。

  • 相关阅读:
    12个Web开发者应该掌握的Firebug技巧
    sql语句修改表结构
    从数据库中查询数据
    收发短信API
    日志12.03
    监听短信数据库变化
    漫谈C语言及如何学习C语言(转)
    阅读短信
    在src文件中寻找短信数据库表
    拦截短信示例1
  • 原文地址:https://www.cnblogs.com/sosopop/p/1766801.html
Copyright © 2011-2022 走看看