многопоточность — Как использовать tinycthread для параллельного программирования на C ++

Я только начал использовать 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 таким образом, который не позволяет мне ставить любое целое число в качестве моих параметров. Итак, что я должен сделать, чтобы создать функцию потока с целым числом в качестве параметра.

1

Решение

Аргумент 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, &param);
thrd_join(t, NULL);
}

поскольку TinyCThread является альтернативой C TinyThread ++, Вы должны использовать эту библиотеку классов C ++.

Кроме того, C ++ поддерживает std::thread взгляните на это.

1

Другие решения

Передать указатель на int переменная, содержащая значение, которое вы хотите передать:

int a = 10;
thrd_create(&t, Haha, &a);
...

int Haha(void *ptr) {
int *ap = static_cast<int*>(ptr);
int a = *ap;

}

Если вы намереваетесь написать через ap указатель, убедитесь, что указанный объект не вышел из области видимости.

1

По вопросам рекламы [email protected]