设为首页 加入收藏

TOP

VC++多线程调用webservice实例
2014-11-23 21:34:50 】 浏览:773
Tags:线程 调用 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++等也需要如此操作,方法类似。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何结束线程VC++ 下一篇VC中Unicode字符串的处理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目