например сохрани функцию с аргументами из вторичного потока в boost::function и дальше в зависимости от того должна ли она выполнится синхронно или асинхронно, 1) нотифицируешь главный поток, а во вторичном ждешь завершения выполнения, например, с помощью boost::condition_variable; 2) кладешь в очередь объект boost::function и также нотифицируешь и продолжаешь работу во вторичном потоке без ожидания.