linux下和windows下的 創建線程函數
1 #ifdef __GNUC__ 2 //Linux 3 #include <pthread.h> 4 #define CreateThreadEx(tid,threadFun,args) pthread_create(tid, 0, threadFun, args) 5 #define CloseHandle(ph) 6 /* 7 int pthread_create( 8 //指向線程標識符的指針。 9 pthread_t *restrict tidp, 10 //設置線程屬性。傳入NULL表示使用默認。 11 const pthread_attr_t *restrict_attr, 12 //新線程所執行的線程函數地址。 13 void*(*start_rtn)(void*), 14 //傳給線程函數的參數。 15 void *restrict arg 16 );*/ 17 #else 18 //windows 19 #include <process.h> 20 #define CreateThreadEx(tid,threadFun,args) _beginthreadex(tid, 0, threadFun, args, 0, NULL) 21 /* 22 HANDLE WINAPI _beginthreadex( 23 //線程內核對象的安全屬性,一般傳入NULL表示使用默認設置。 24 LPSECURITY_ATTRIBUTES lpThreadAttributes, 25 //線程棧空間大小。傳入0表示使用默認大小(1MB)。 26 SIZE_T dwStackSize, 27 //新線程所執行的線程函數地址,多個線程可以使用同一個函數地址。 28 LPTHREAD_START_ROUTINE lpStartAddress, 29 //傳給線程函數的參數。 30 LPVOID lpParameter, 31 //指定額外的標志來控制線程的創建,為0表示線程創建之后立即就可以進行調度,如果為CREATE_SUSPENDED則表示線程創建后暫停運行,這樣它就無法調度,直到調用ResumeThread()。 32 DWORD dwCreationFlags, 33 //返回線程的ID號,傳入NULL表示不需要返回該線程ID號。 34 LPDWORD lpThreadId 35 );*/ 36 #endif
一般使用方式: CreateThreadEx(NULL,threadFun,arg);
但是 Linux下,第一個參數不能為空,不然直接段錯誤!