2012年3月5日 星期一

[C++ 範例代碼] 在Windows 下撰寫簡單 Thread 程式


前言 :
最近遇到一些跨平台的程序,本想自己封裝windows下的CreateThread和linux下的pthread,後來發現Linux社區早就提供了windows下的pthread庫,和linux下一模一樣 :
windows下的pthread庫叫做:pthreads-win32,官方網站是:http://sourceware.org/pthreads-win32/,官方FTP是:
ftp://sources.redhat.com/pub/pthreads-win32/

考慮FTP裡面的內容比較亂,部分已經編譯的庫有問題。我下載了一個看起來比較新的庫,結果弄了半天不能鏈接。建議大家下載:
ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe 這個自解壓文件,壓縮包裡的pthreads.2目錄是源碼,Pre-built.2目錄是編譯所需的頭文件和庫文件。

範例程式 :
* thread_sample.h 代碼 :
  1. #include   
  2. #include   
  3. #include   
  4.   
  5. void threadSampleTest1(bool b) ;  

* thread_sample.cpp 代碼 :
  1. #include "thread_sample.h"  
  2.   
  3. void* print_message_function( void *ptr );  
  4. void threadSampleTest1(bool b) {  
  5.     if(b){  
  6.         //  
  7.         pthread_t thread1, thread2;  
  8.         char* message1 = "Thread1";  
  9.         char* message2 = "Thread2";  
  10.         void* (*pmf)(void *ptr);  
  11.         pmf = print_message_function;  
  12.         int iret1 = pthread_create(&thread1, NULL, pmf, message1);  
  13.         int iret2 = pthread_create(&thread2, NULL, pmf, message2);  
  14.   
  15.         pthread_join(thread1, NULL);  
  16.         pthread_join(thread2, NULL);  
  17.         printf("Thread1 return %d\n",iret1);  
  18.         printf("Thread2 return %d\n",iret2);  
  19.     }  
  20. }  
  21. void* print_message_function( void *ptr ){  
  22.      char *message;  
  23.      message = (char *) ptr;  
  24.      printf("Print Message: %s \n", message);  
  25.      return NULL;  
  26. }  


執行結果 :
Print Message: Thread1
Print Message: Thread2
Thread1 return 0
Thread2 return 0


補充說明 :
Linux Tutorial : POSIX thread coding
POSIX Threads Programming
「多工」(Multitasking)與「多緒」(Multi-thread) 有何差別?
[C++ 常見問題] 線程的同步 (synchronized)

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...