Я использовал pthread_create, создал дочерний поток для запрошенного http, после того как я получил данные, я хочу вызвать основной поток, чтобы сделать некоторое обновление пользовательского интерфейса.
pthread_detach();
pthread_exit();
pthread_join();
Три функции, которые можно использовать для этого? Почему?
Есть ли сердечный человек, чтобы решить мою путаницу? Большое спасибо!
Честный ответ — ни один из вышеперечисленных. Невозможно вызвать основной поток из дочернего потока, но это не значит, что вы не можете делать то, что пытаетесь.
Дочерний поток разделяет то же пространство памяти, что и родительский поток. Что вам нужно сделать, это создать способ для дочернего потока сообщить родителю, что он хочет отправить сообщение пользователю (UI). Это может быть сделано несколькими различными способами, но простым методом будет предоставление функции, которая просто берет сообщение, которое вы хотите отправить, и помещает его в очередь.
Основному потоку нужно будет просто время от времени проверять эту очередь на наличие сообщений и извлекать их, когда он там видит, чтобы поместить в пользовательский интерфейс.
Конечно, вам нужно убедиться, что нажатие / выталкивание из этой очереди контролируется блокировкой мьютекса, но поскольку мы говорим о сообщениях для пользователя, это не должно быть чем-то, что вы делаете слишком часто, и не должно вызывать каких-либо реальные проблемы с производительностью.
Как я уже говорил, это только одна идея, как вы могли бы сделать это. Хотя существует много способов, основная идея заключается в том, что потокам нужен способ общения друг с другом.