#include #include #include #include #include #include #include #include #include #include #include void * client(void *arg) //connfd;
else if (ret == 0)
printf("buf : %s\n", buf);
ret = write(connfd, buf, sizeof(buf));
if (ret == -1)
} pthread_exit(null);
}void fun(int sig)
int main(int argc, char *argv)
printf("create listenfd = %d success\n", listenfd);
/* 2. 設定伺服器的ip位址和埠號(將socket和伺服器的ip位址和埠號進行繫結);bind */
memset(&srvaddr, 0, sizeof(struct sockaddr_in));
srvaddr.sin_family = af_inet;
srvaddr.sin_port = htons(9999);
srvaddr.sin_addr.s_addr = inet_addr("192.168.2.100");
ret = bind(listenfd, (const struct sockaddr *)&srvaddr, sizeof(srvaddr));
printf("port : %d\n", ntohs(srvaddr.sin_port));
if (ret == -1)
printf("bind success !\n");
/* 3. 啟動監聽(啟動伺服器); listen */
ret = listen(listenfd, 1024);
if (ret == -1)
printf("listen success !\n");
while(1)
printf("connect connfd = %d\n", connfd);
printf("ip : %s\n", inet_ntoa(cltaddr.sin_addr));
printf("port: %d\n", ntohs(cltaddr.sin_port));
/* 建立乙個子執行緒,處理客戶端的請求*/
ret = pthread_create(&client_pthread, null, client, (void *)&connfd);
if (ret != 0)
printf("create client_pthread = %d success\n", (int)client_pthread);
ret = pthread_detach(client_pthread);
if (ret != 0)
printf("detach cltaddr pthread success\n");
} close(listenfd);
return 0;
}
多執行緒的實現
通常情況下,應用程式都是在乙個執行緒中執行操作。但是,當呼叫乙個耗時操作 例如,大批量i o或大量矩陣變換等cpu密集操作 時,使用者介面常常會凍結。而使用多執行緒可以解決這一問題。qt有兩種多執行緒的方法,一種是繼承qthread的run函式 另外一種是把乙個繼承於qobject的類轉移到乙個th...
多執行緒 實現多執行緒的幾種方式
public class mythread extends thread mythread mythread1 newmythread mythread mythread2 newmythread mythread1.start mythread2.start public class mythre...
(40)多執行緒 實現多執行緒方法
建立執行緒用法 1.繼承thread,重寫run 方法,建立子類物件 a a new a 執行緒開始執行 a.start 2.實現runnable介面,實現run 方法,建立實現類物件 a a new a 建立 類物件 thread t new thread a 執行緒開始執行 t.start 上面...