2015-06-16 97 views
0

我需要執行以下操作: 創建一個線程,可以在一行中創建10個線程。 每個線程只打印它的ID並睡眠n秒,其中n是當前線程的序列號。 但是,我無法獲得傳遞參數的權利,當我運行我的代碼時,它似乎像線程只是在睡覺..有些幫助嗎?Pthread ID和睡眠

這裏是我的代碼:

#include <pthread.h> 
#include <stdio.h> 
#include <stdlib.h> 
# define N 10 

void* printID (void *i) 
{ 
int* p=(int*) i; 
sleep(p); 
pthread_exit(NULL); 
} 

void* th (void* unused) 
{ 
int sec,i; 
sec=1; 
i=1; 

while(i<=10){ 
pthread_t pid1; 
pthread_create (&pid1, NULL, &printID, (void *)&i); 
pthread_join(pid1,NULL); 
printf("Thread ID je: %d \n",(int) pid1); 

i=i+1; 
} 
} 

int main(){ 

pthread_t pid; 

pthread_create (&pid, NULL, &th, NULL); 
pthread_join(pid,NULL); 

return 0; 
} 
+1

啓用您的編譯器的警告。 – Quentin

回答

1

你的參數傳遞是好的。但是您沒有將該值傳遞給sleep

它應該是

sleep(*p); 

pi的地址(從功能th())。您需要取消引用指針以獲取值。

+0

感謝:D它的工作 現在的問題是,它只是寫了10次相同的ID ..:s – Emir

+0

Pthreads可能重複使用該pid,因爲您只在前一個退出後創建一個新線程。如果您想同時創建並運行它們,則需要對代碼進行一些更改才能正常運行。可能是,問一個新問題。 –

+0

我認爲這很好..再次感謝你。 – Emir