网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
.NET 组件中的线程辅助
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
space // 线程函数 long WINAPI MySTAThreadFunction(long lParam); long WINAPI MyMTAThreadFunction(long lParam); IHelloDotNetPtr spHelloNET = NULL; IStream* g_pStream1 = NULL; IStream* g_pStream2 = NULL; int main(int argc, char* argv) { . ::CoInitialize(NULL); cout << "The Thread ID of the primary STA thread is : " << ::GetCurrentThreadId() << endl; hr = spHelloNET.CreateInstance(__uuidof(HelloDotNet)); cout << "From .NET when called from the primary STA Thread : " << spHelloNET->GetThreadID() << endl; . hr = CoMarshalInterThreadInterfaceInStream(_uuidof(IHelloDotNet), spHelloNET, &g_pStream1); hr = CoMarshalInterThreadInterfaceInStream(_uuidof(IHelloDotNet), spHelloNET, &g_pStream2); hThreadSTA = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)MySTAThreadFunction, NULL,0 ,&dwThreadIDSTA); cout << "The Thread ID of the STA based Worker thread is : " << dwThreadIDSTA << endl; hThreadMTA = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)MyMTAThreadFunction, NULL,0,&dwThreadIDMTA); cout << "The Thread ID of the MTA based Worker thread is : " << dwThreadIDMTA << endl;


::WaitForSingleobject(hThreadSTA,INFINITE); ::WaitForSingleobject (hThreadMTA,INFINITE); return 0; } long WINAPI MySTAThreadFunction(long lParam) { ::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); cout << "From .NET when called from the STA Worker Thread (Direct Access) : " << spHelloNET->GetThreadID() << endl; IHelloDotNetPtr spHello = NULL; HRESULT hr = CoGetInterfaceAndReleaseStream(g_pStream1, __uuidof(IHelloDotNet), (void **)&spHello); if(S_OK == hr) { cout << "From .NET when called from the STA Worker Thread (Marshaled) : " << spHello->GetThreadID() << endl; } return 0; } long WINAPI MyMTAThreadFunction(long lParam) { // 让线程进入MTA ::CoInitializeEx(NULL,COINIT_MULTITHREADED); cout << "From .NET when called from the MTA Worker Thread (Direct Access) : " << spHelloNET->GetThreadID() << endl; IHelloDotNetPtr spHello = NULL; HRESULT hr = CoGetInterfaceAndReleaseStream(g_pStream2, __uuidof(IHelloDotNet), (void **)&spHello); if(S_OK == hr) { cout << "From .NET when called from the MTA Worker Thread (Marshaled) : " << spHello->GetThreadID() << endl; } // 从线程退出 return 0; }/* 结束MyMTAThreadFunction */ 当运行控制台应用程序时,这是得到的输出。
The Thread ID of the primary STA thread is : 2220 From .NET when called from the primary STA Thread : 2220 The Thread ID of the STA based Worker thread is : 2292 The Thread ID of the MTA based Worker thread is : 2296 From .NET when called from the STA Worker Thread (Direct Access) : 2292 From .NET when called from the STA Worker Thread (Marshalled) : 2292 From .NET when called from the MTA Worker Thread (Direct Access) : 2296 From .NET when called from the MTA Worker Thr

  • 上一篇资讯: 内存映射文件
  • 下一篇资讯: Unity的属性注入
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号