2015-03-23 2 views
0

Я реализовал PThreads в довольно элементарным способом, как:PTHREAD - Thread Выход рано, несмотря на призывая pthread_join

#include<iostream> 
#include<pthread.h> 
#include<stdio.h> 

using namespace std; 

class ThreadParameter 
{ 
public: 
char symbol_char; 
int count; 
}; 

void* print_char (void* param) 
{ 

ThreadParameter* p = (ThreadParameter*)param; 

for (int i=0; i< p->count; i++) 
{ 
cout<< p->symbol_char <<endl; 
i++; 
} 
return NULL; 
} 

int main() 
{ 
pthread_t thread1_id; 

ThreadParameter param1; 

param1.symbol_char = 'X'; 
param1.count = 27; 

pthread_create (&thread1_id, NULL, &print_char, &param1); 

int i = 0; 

while (i<10) 
{ 
cout<<"O"<<endl; 
i++; 
} 

pthread_join(thread1_id,NULL); 

return 0; 
} 

И его выход не показывает ожидаемый н.у.к. из X. Могу ли я делать какую-то ошибку в вызове функции присоединиться или что? Спасибо за помощь.

Output

P.S: Я пробовал различные значения X от 5 до 20 лет, но она всегда дает мне меньше, чем искомых числа X.

ответ

1

Вы увеличивающимся i дважды в print_char().

Изменить

for (int i=0; i< p->count; i++) 
{ 
    cout<< p->symbol_char <<endl; 
    i++; 
} 

в

for (int i=0; i< p->count; i++) 
{ 
    cout<< p->symbol_char <<endl; 
} 
+0

Ой !! Такая плохая ошибка. Ужасно меня. Really Sorry –

+0

Кроме этого. Правильно ли это реализовать? –

+0

Это выглядит хорошо для меня. Однако я бы предложил использовать C++ 11 и новый стандартный способ программирования потоков на C++, если это возможно. – chmike