Я только начал использовать tinycthread.h для параллельного программирования. Тем не менее, у меня нет идей, как его использовать. В настоящее время я хочу знать, как я могу создать функцию потока с этой библиотекой.
Вот две функции, перечисленные в библиотеке tinycthread
typedef int(* thrd_start_t)(void *arg)
int thrd_create (thrd_t * thr,thrd_start_t func,void * arg )
Я хочу создать функцию потока с целым числом в качестве параметра.
int Haha (int a){} -> to be my thread function
int main(){
thrd_t t;
thrd_create(&t,Haha,int a);
}
Я пишу что-то подобное в моей программе.
но как принято typedef int(* thrd_start_t)(void *arg)
typedef таким образом, который не позволяет мне ставить любое целое число в качестве моих параметров. Итак, что я должен сделать, чтобы создать функцию потока с целым числом в качестве параметра.
Аргумент Haha
должно быть void *
не int
, поэтому попробуйте передать ваши целочисленные входные данные с помощью некоторого приведения:
int Haha (void *arg)
{
int *a = static_cast<int*>(arg);
printf("%d", *a);
return 0;
}
int main()
{
int param = 123;
thrd_t t;
thrd_create(&t, Haha, ¶m);
thrd_join(t, NULL);
}
поскольку TinyCThread является альтернативой C TinyThread ++, Вы должны использовать эту библиотеку классов C ++.
Кроме того, C ++ поддерживает std::thread
взгляните на это.
Передать указатель на int
переменная, содержащая значение, которое вы хотите передать:
int a = 10;
thrd_create(&t, Haha, &a);
...
int Haha(void *ptr) {
int *ap = static_cast<int*>(ptr);
int a = *ap;
}
Если вы намереваетесь написать через ap
указатель, убедитесь, что указанный объект не вышел из области видимости.