Я хочу иметь возможность поймать конец основной функции и выполнить дополнительные операции в другом потоке до завершения процесса в C ++.
Я пытался получить дескриптор основного потока, а затем присоединиться к нему, но кажется, что std :: this_thread / boost :: this_thread не позволяет вам получить доступ к дескриптору для текущего потока.
В основном я хотел бы сделать следующее:
void thread_function(thread_handler) {
thread_handler.join();
< Perform extra operations before the program finishes its main function >
}
int main() {
< thread_function thread started in LD_PRELOAD>
.... Program runs .....
return 0;
}
В моем сценарии эти две функции не имеют общего состояния, поскольку поток thread_function вызывается в общей библиотеке с использованием LD_PRELOAD, но я могу передать ему все, что угодно из потока, который позже вызывает главный(). Вполне возможно, что невозможно поймать конец основной функции, но я решил спросить, если кто-нибудь знает об этом.
Похоже, вам нужен семафор, в конце концов, вы должны предотвратить закрытие программы, пока все ваши потоки не завершат все, что им нужно сделать при выходе из программы.
Таким образом, вам нужно, чтобы основной поток сигнализировал об остановке, а затем дождитесь завершения других потоков (если их больше одного) и доложите, что они завершены. Самый простой способ — установить событие для уведомления других потоков, а затем подождать, пока каждый поток не сообщит семафору, установленному на поток, который вы собираетесь ожидать.
Объекты питомника подойдут для этого, они будут работать в перекрестном процессе, поэтому они будут работать с общими библиотеками.