Я бегу 32 bits
ОС. Теперь созданный мной поток вернет значение int, которое может быть больше 4G
. Как я могу получить это значение от моей функции main()
на pthread_join()
? . Похоже, в 32 bits
системе, (void *)
- 4 байта.Linux, C: как я могу получить возвращаемое значение из потока, который greate чем 4G в 32-битной ОС?
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
void* thread_function(void)
{
uint64_t nbytes = 0;
//assign values to nbytes, it could be larger than 4G.
return (void *)nbytes;
}
int main()
{
pthread_t thread_id;
uint64_t nbytes;
pthread_create (&thread_id, NULL, &thread_function, NULL);
pthread_join(thread_id,(void**)&nbytes);
}
Почему бы не отправить '& nbytes' в качестве вашего текущего NULL аргумента в' pthread_create' и просто указать и установить значение через адрес в вашей функции? – WhozCraig
Прежде всего, ваш 'thread_function' имеет неправильный тип. Он должен принимать аргументы. Теперь угадайте, что? Вы можете использовать эти аргументы для передачи значений взад и вперед. И возвращаемый тип 'void *' на самом деле не предназначен для использования в типах без указателей. –