Нужно вернуть данные из потоковой функции:
void* func(void*){
int* res=new int(10);
return (void*)res; //pthread_exit((void*)res) тоже не помогает
}
int main() {
pthread_t tid;
pthread_create(&tid,0,func,0);
void** res=0;
pthread_join(tid,res);
int** a=(int**)res;
cout<<**a<<endl;
}
Получаю ошибку на этапе выполнения
2-й аргумент pthread_join - это адрес, куда будет положен указатель (void*), возвращенный из потока. Вы передаете в NULL, в качестве такого адреса, и естественно получаете ошибку. Решение:
void* res=0;
pthread_join(tid,&res);
int* a=(int*)res;
cout<<*a<<endl;
Имеет смысл сразу при создании передавать в поток указатель на переменную, в которую поток должен будет сохранить результат:
#include <pthread.h>
#include <iostream>
#include <new>
#include <memory>
#include <cstdlib>
void * func(void * param) noexcept
{
auto const pp_int{static_cast<int * *>(param)};
(*pp_int) = new (::std::nothrow) int{10};
return nullptr;
}
int main()
{
int * p_int{};
::pthread_t thread_handle{};
auto const create_result
{
::pthread_create
(
::std::addressof(thread_handle)
, nullptr
, func
, static_cast<void *>(::std::addressof(p_int))
)
};
if(0 == create_result)
{
auto const join_result{::pthread_join(thread_handle, nullptr)};
if(0 != join_result)
{
::std::abort();
}
if(nullptr != p_int)
{
::std::cout << (*p_int) << ::std::endl;
delete p_int;
p_int = nullptr;
}
}
return 0;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
В C можно рендерить svg в cairo с помощю librsvg, чем рендерить svg в gtkmm? cairomm? или как засунуть в cairomm GdkPixbuf*?
Занимаюсь разработкой собственной мини-утилиты для работы с MySQLКак я могу проверить подключение к указанному хосту (по логину и паролю) без...
До добавления maven у меня был один java class Main, после добавления его местоположение было в srcmaven создал структуру проекта и на сколько я понимаю...