`

VC++多线程调用webservice实例

 
阅读更多
一、开始多线程
1.开始创建多线程(变量HThread和ThreadID全局函数)
void CSleepAnalysisServiceDlg::OnBnClickedStartanalisis()
{

UpdateData(TRUE);

if (HThread==NULL)
{
HThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)AnalyzThreadFunction,(LPVOID)this,0,&ThreadID);
}
else
{
ResumeThread(HThread);
}
//InitAnalysis();
//   RunAnalysis();

}
2.线程函数(注意是全局函数,不属于某一个类)

void AnalyzThreadFunction(LPVOID lparam)
{
m_bRun=TRUE;
    CSleepAnalysisServiceDlg*pthis=(CSleepAnalysisServiceDlg*)lparam;
    CoInitialize(NULL);
BOOL ini=pthis->InitAnalysis();
BOOL analy=pthis->RunAnalysis();
CoUninitialize();
}


二、在子线程调用主线程的函数


void AnalyzThreadFunction(LPVOID lparam)
{
m_bRun=TRUE;
    CSleepAnalysisServiceDlg*pthis=(CSleepAnalysisServiceDlg*)lparam;
    CoInitialize(NULL);
BOOL ini=pthis->InitAnalysis();
BOOL analy=pthis->RunAnalysis();
CoUninitialize();
}

BOOL CSleepAnalysisServiceDlg::InitAnalysis()


BOOL CSleepAnalysisServiceDlg::RunAnalysis()



三、调用webservice的问题

一段在主线程下调试成功的代码,移植到多线程下就不一定完全可行(虽然编译通过)。

    比如刚刚写的一段调用远程WebService的代码,每次点击“开始”按钮,就报错“尚未调用coinitialize”,检查了一下代码,貌似没发现有啥不妥,没法子,只有百度去了。

    百度后才发现,原来多线程下使用WebService还有“秘密”:必须在使用前初始化COM环境,具体操作如下:
    1、使用前先CoInitialize(nil);
    2、使用完后CoUninitialize;

    上述是delphi语法,C++等也需要如此操作,方法类似。


分享到:
评论

相关推荐

    pb11.5创建以及调用webservice实例

    使用pb11.5新功能进行创建webservice服务以及前台调用实例,因在网络上没有找到过相应实例,研究了好久才搞定,呵呵,需要的给点分吧.

    Asp.net 2.0新增特性异步页功能处理过程

    使用Asp.net 2.0新增特性异步页功能处理过程 简单介绍了客户端异步实现原理和实例里面涉及多线程的例子 当未使用异步页时,一个线程只能为同一个页面的请求服务. 即使页面请求过程中处理其它的I/O等操作 时,此线程也...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

    而在1.x版本中,由于静态分配环境变量,多线程技术是不被允许的(只有一个线程可以用这个环  境变量调用远程方法或处理请求信息)。  4 准备工作  要开始用gSOAP创建一个web服务应用, 你需要:  一个C/C++编译器....

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    13.4 关于调用接口方法的更多探讨 13.5 隐式和显式接口方法实现(幕后发生的事情) 13.6 泛型接口 13.7 泛型和接口约束 13.8 实现多个具有相同方法名和签名的接口 13.9 用显式接口方法实现来增强编译时类型安全...

    net学习笔记及其他代码应用

    22.常用的调用WebService的方法有哪些? 答:1.使用WSDL.exe命令行工具。 2.使用VS.NET中的Add Web Reference菜单选项 23..net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域...

    asp.net知识库

    体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0使用Web Part创建应用程序之二...

    asp.net面试题

    具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。 8.列举ADO.NET中的五个主要对象,并简单描述 connection,command,dataReader,trans,dataset ......

    最新Java面试宝典pdf版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2010版

    50、多线程有几种实现方法?同步有几种实现方法? 51、启动一个线程是用run()还是start()? . 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 53、线程的基本概念、线程...

    Java面试笔试资料大全

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2012版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本...

    JAVA面试宝典2010

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典2012新版

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    Java面试宝典-经典

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试题大全(2012版)

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java面试宝典2012

    50、多线程有几种实现方法?同步有几种实现方法? 36 51、启动一个线程是用run()还是start()? . 37 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 37 53、线程的基本概念...

    C#编程经验技巧宝典

    24 <br>0050 using关键字的用法 24 <br>0051 变量的作用域 25 <br>2.5 其他 26 <br>0052 有效使用this对象 26 <br>0053 如何声明变量 26 <br>0054 如何声明相同类型的多个变量 26 ...

Global site tag (gtag.js) - Google Analytics