gSoap的多執行緒程式

2021-08-26 10:15:01 字數 2811 閱讀 2556

原文出處在這裡

一 gsoap需要的標頭檔案:

//gsoap ns service name:calc

//gsoap ns service style:rpc

//gsoap ns service encoding:encoded

//gsoap ns service namespace:

//gsoap ns service location:

//gsoap ns schema namespace: urn:calc

int ns__add(double a, double b, double *result);

int ns__sub(double a, double b, double *result);

int ns__mul(double a, double b, double *result);

int ns__div(double a, double b, double *result);

int ns__pow(double a, double b, double *result);

二 多執行緒伺服器關鍵**

#include

#include "calc.nsmap"

#include "soaph.h" /

///巨集與全域性變數的定義

#define backlog (100)

#define max_thr (10)

#define max_queue (1000)

pthread_mutex_t queue_cs; //佇列鎖

pthread_cond_t queue_cv; //條件變數

soap_socket queue[max_queue]; //陣列佇列

int head =0, tail =0; //佇列頭佇列尾初始化 //

//void * process_queue(void *); //執行緒入口函式

int enqueue(soap_socket); //入佇列函式

soap_socket dequeue(void); //出佇列函式 //

//執行緒入口函式

void * process_queue(void * soap)

soap_serve(tsoap);

soap_destroy(tsoap);

soap_end(tsoap);

}return null;}

//入佇列操作

int enqueue(soap_socket sock)

pthread_cond_signal(&queue_cv);

pthread_mutex_unlock(&queue_cs);

return status;}

//出佇列操作

soap_socket dequeue()

sock = queue[head++];

if (head >= max_queue)

pthread_mutex_unlock(&queue_cs);

return sock;}

//具體服務方法

//加法的實現

int ns__add(struct soap *soap, double a, double b, double *result)

//減法的實現

int ns__sub(struct soap *soap, double a, double b, double *result)

//乘法的實現

int ns__mul(struct soap *soap, double a, double b, double *result)

//除法的實現

int ns__div(struct soap *soap, double a, double b, double *result)

return soap_ok;

} //乘方的實現

int ns__pow(struct soap *soap, double a, double b, double *result)

return soap_ok;}

////主函式

int main(int argc,char ** argv)

else

fprintf(stderr,"socket connection successful %d ",m);

//生成服務執行緒

for(i = 0; i

for(;;)

else

}//客戶端的ip位址

fprintf(stderr,"accepted connection from ip= %d.%d.%d.%d socket = %d ",

((serversoap.ip)>>24)&&0xff,((serversoap.ip)>>16)&0xff,((serversoap.ip)>>8)&0xff,(serversoap.ip)&0xff,(serversoap.socket));

//請求的套接字進入佇列,如果佇列已滿則迴圈等待

while(enqueue(s) == soap_eom)

sleep(1000);

}//服務結束後的清理工作

for(i = 0; i < max_thr; i++)

}for(i=0; i< max_thr; i++)

pthread_mutex_destroy(&queue_cs);

pthread_cond_destroy(&queue_cv);

}//分離執行時的環境

soap_done(&serversoap);

return 0;}

python程式多執行緒 PYTHON多執行緒

在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...

多執行緒程式的除錯

gdb對於多執行緒程式的除錯有如下的支援 gdb r starting program root thread new thread 1073951360 lwp 12900 new thread 1082342592 lwp 12907 以下三個為新產生的執行緒 new thread 109073...

簡單的多執行緒程式

下面是一段在windows環境下,建立多個執行緒執行程式的一段 這段 我去年就見過了,雖然挺簡單的,但是一直沒有在意,這次重新看它,希望能夠看出點不一樣的東西,平行計算一直是我乙個非常喜歡的研究方向.在自己寫的過程當中,還有乙個地方出現了乙個小小的錯誤,我想這如果不是我自己重新又寫了一遍是不會發現這...