我假設client_sock被定義爲「int client_sock」。在這種情況下,你應該寫如下:
if (pthread_create(&newthread , NULL, (void *) accept_request, &client_sock) != 0) {
然後在accept_request(其中,順便說一句,應該是一個函數採用指針),你會做這樣的:
void *accept_request(void *client_sock_addr) {
int client_sock = *((int*) client_sock_addr);
}
轉換一個int到( void *)可能不可移植(因爲int和void *的數據大小不一定相同)。當然,它可能適用於你當前的編譯器......
感謝jiles指出了這點:根據代碼的其餘部分,該地址的值可能會改變(例如,如果圍繞accept構造有一個循環並且2個接受在一個線程創建之前到達)。做到這一點的最好辦法確實是使用malloc分配內存喜歡
int *client_sock_addr=malloc(sizeof(int));
*client_sock_addr = accept(server_sock, (struct sockaddr *)&client_name, &client_name_len);
if (pthread_create(&newthread , NULL, (void *) accept_request, client_sock_addr) != 0) {
perror("pthread_create");
}
然後在功能做:
void *accept_request(void *param) {
int *client_sock_addr = (int*) client_sock_addr;
int client_sock = *client_sock_addr;
// Before exiting the thread
free(client_sock_addr);
}
什麼是accept_request? – Anycorn 2010-08-15 00:32:59