2015-06-16 74 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