PThread — поток закрывается раньше, несмотря на вызов pthread_join

Я реализовал PThreads довольно элементарно:

#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. Я делаю какую-то ошибку при вызове функции соединения или что? Спасибо за помощь.

Вывод

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


person Failed Scientist    schedule 23.03.2015    source источник


Ответы (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;
}
person chmike    schedule 23.03.2015
comment
Ой!! Такой плохой баг. Ужасно с моей стороны. Сердечно извиняюсь - person Failed Scientist; 23.03.2015
comment
Это выглядит нормально для меня. Однако я бы предложил использовать С++ 11 и новый стандартный способ программирования потоков на С++, если это возможно. - person chmike; 23.03.2015
comment
Могу ли я использовать его и в Windows/VS 2010? Любой учебник и т. д. для этого, пожалуйста - person Failed Scientist; 23.03.2015
comment
Я так не думаю. Вам нужна более поздняя версия Visual Studio. Я думаю, что VS2013 уже сделал бы это. Если возможно, выберите более новый. VS2010 довольно старый. Для получения учебника проверьте этот solarianprogrammer.com/2011/12/16. /cpp-11-thread-tutorial - person chmike; 23.03.2015
comment
У меня тоже 15. Большое спасибо!! - person Failed Scientist; 23.03.2015