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

    待续。。。

  • 相关阅读:
    Vagrant 扩大磁盘根目录
    阿里云 轻量应用服务器 vnc 远程桌面连接
    图片加水印C#源代码
    Asp.net网站Pdf加水印C#源代码
    [FAQ] uni-app 如何让页面不展示返回箭头图标
    [PHP] composer, PHP Fatal error: Allowed memory size of xx bytes exhausted
    [FE] uni-app 导航栏开发指南
    [FE] uni-app 动态改变 navigationBarTitleText 导航标题
    [FE] yarn, npm 切换镜像源
    [FAQ] Phpstorm 代码提示功能失效问题
  • 原文地址:https://www.cnblogs.com/sosopop/p/1766801.html
Copyright © 2011-2022 走看看