航空售票例子之伺服器端的執行緒設計

2021-06-21 03:44:00 字數 1458 閱讀 3839

伺服器端在監聽客戶端的請求採用了乙個執行緒,在為每個客戶請求時又安排了乙個執行緒。

下面是用來監聽客戶端請求的執行緒所執行的函式:

int listen_fd,conn_fd;     //監聽socket,連線socket

struct sockaddr_in server,cli_addr;

int ret,buffer_index,i,cli_len;

unsigned long ip_addr;

int flag = 1;

pthread_t listentid,servicetid; //監聽執行緒id,服務執行緒id

/*監聽執行緒*/

void* listen_thread(void *p)

/*填寫服務執行緒需要的資訊*/

pthread_mutex_lock(&buff_mutex);

thread_buff[buffer_index].buff_index = buffer_index;

thread_buff[buffer_index].ip_addr = ip_addr;

thread_buff[buffer_index].conn_fd = conn_fd;

thread_buff[buffer_index].buff_status = buff_occupied;

pthread_mutex_unlock(&buff_mutex);

/*建立新底服務執行緒*/

ret = pthread_create(&servicetid,null,service_thread,&thread_buff[buffer_index]);

if(ret == -1)

}}

為客戶端安排的服務執行緒呼叫的函式是:void* service_thread(void *p)

#ifndef _service_thread_h

#define _service_thread_h

#include "ticket.h"

#include "threadbuff.h"

static void thread_err(char *s, int index)

void* service_thread(void *p)

/*ret==0說明客戶端鏈結已關閉*/

if(ret == 0)

/*ret為其他值說明接受到了客戶端底請求訊息*/

init_message();

memcpy(&message,recv_buf,sizeof(message));

switch(message.msg_type)else

}pthread_mutex_unlock(&ticket_list[i].ticket_mutex);

}break;

case inquire_one:

for(i=0;i航空售票專案原始碼。有一些小bug,還在繼續改進。

多執行緒伺服器端的實現

1.單cpu系統中如何同時執行多個程序?請解釋該過程中發生的上下文切換。答 只有1個cpu cpu的運算裝置core 的系統中不是也可以同時執行多個程序嗎?只是因為系統將cpu時間分成了多個微小的塊後分配給了多個程序。為了分時使用cpu,需要 上下文切換 的過程。2.為何執行緒上下文切換更快?執行緒...

多執行緒TCP程式伺服器端

多執行緒tcp程式伺服器端 1.建立serversocket物件,指定監聽的埠號。2.把accept 方法作為迴圈條件,迴圈監聽客戶端請求。3.建立執行緒類,定義乙個socket型別的成員變數,並定義乙個可以為他賦值的建構函式方法。4.在run 方法中使用socket變數進行任意的通訊操作。5.在主...

伺服器端動態載入DataGrid控制項並設定其屬性

datagrid 在asp.程式設計中占有非常重要的地位,對於瀏覽器中大批量資料的呈現,datagrid 幾乎不可缺少。常用的設定 datagrid 屬性的方法都是在前台由 asp語句實現,這樣顯然不適合 datagrid 的動態載入,通過後台 c 實現前台的功能顯得非常重要,下面就通過乙個例項來說...