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