windows下Qt+gsoap多线程环境下使用方法

本文介绍了在Windows 7系统中,使用Qt 4.8.1和gsoap 2.8.6创建Web Service服务的过程。通过QtConsole工程,详细阐述了服务端的编译步骤,包括头文件和实现文件的编写,以及多线程处理客户端请求的方法,利用SRWLOCK和CONDITION_VARIABLE进行同步控制。
摘要由CSDN通过智能技术生成

背景:基于Qt和C实现web service 服务

网上大多数都是在linux环境下创建的,将最近代码贴上 供参考,使用gsoap版本为2.8.6  win7环境  qt4.8.1 创建的是QTConsole工程。

一、服务端编译步骤

参考http://blog.csdn.net/testcs_dn/article/details/51463367

我的头文件编写如下 data_trans_svr.h

//gsoap ns service name: data_trans  
//gsoap ns service namespace: http://localhost:40004/data_trans.wsdl  
//gsoap ns service location: http://localhost:40004  
//gsoap ns service executable: data_trans.cgi  
//gsoap ns service encoding: encoded  
//gsoap ns schema namespace: urn:data_trans  


typedef std::string xsd__string;


int ns__Login(char* usr, char *password, char * param, bool &is_login);  


int ns__DownloadConf(char** dev_info);


int ns__ReadData(xsd__string& data);

实现文件如下: (main.cpp)

#include <QtCore/QCoreApplication>
#include "stdafx.h"
#include "soapH.h"
#include <windows.h>
#include <QTextCodec>
#include "data_trans.nsmap"




// 宏定义
#define BACKLOG  100            /* Max. request backlog */
#define MAX_THREAD  5         // 最大线程数
#define  MAX_QUEUE  1000   // 最大队列长度


// 全局变量定义
SRWLOCK g_lock;  
CONDITION_VARIABLE g_ConditionVar; 
SOAP_SOCKET  queue[MAX_QUEUE];   //数组队列
int  head =0, tail =0;                             //队列头队列尾初始化 


// 全局函数
void *   process_queue(void *);        //线程入口函数
int    enqueue(SOAP_SOCKET);       //入队列函数
SOAP_SOCKET dequeue(void);       //出队列函数


int http_get(struct soap * soap);




//线程入口函数
void * process_queue(void * soap)
{
struct soap * tsoap = (struct soap *)soap;
for(;;)
{
tsoap->socket = dequeue();
if (!soap_valid_socket(tsoap->socket))
{
break;
}
soap_serve(tsoap);
soap_destroy(tsoap);
soap_end(tsoap);
}
return NULL;
}


//入队列操作
int enqueue(SOAP_SOCKET sock)
{
int status = SOAP_OK;
int next;
AcquireSRWLockExclusive(&g_lock);  //获得SRW锁
next = tail +1;
if (next >= MAX_QUEUE) 
next = 0;
if (next == head) 
status = SOAP_EOM;
else
{
queue[tail] =sock;
tail = next;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值