Вероятно, вы создаете структуру в той же области, что и pthread_create. Эта структура больше не будет действительна после выхода из этой области.
Попробуйте создать указатель на структуру в куче и передать этот указатель структуры в поток. Не забудьте удалить эту память где-нибудь (в треде, если вы никогда больше не будете ее использовать — или когда она вам больше не понадобится).
Кроме того, как упоминалось в Cyberconte, если вы собираетесь получать доступ к этим данным из разных потоков, вам необходимо заблокировать доступ к ним с помощью мьютекса или критической секции.
Редактировать 14 мая 2009 г., 12:19 EST: Кроме того, как уже упоминали другие люди, вы должны привести свой параметр к правильному типу.
Если вы передаете переменную, которая является глобальной структурой (на которой вы, кажется, настаиваете), ваша функция потока должна будет привести к типу:
void my_thread_func(void* arg){
my_struct foo = *((my_struct*)(arg)); /* Cast the void* to our struct type */
/* Access foo.a, foo.b, foo.c, etc. here */
}
Или, если вы передаете указатель на свою структуру:
void my_thread_func(void* arg){
my_struct* foo = (my_struct*)arg; /* Cast the void* to our struct type */
/* Access foo->a, foo->b, foo->c, etc. here */
}
person
Lyndsey Ferguson
schedule
14.05.2009