Если в вашем основном потоке работает насос сообщений, вы можете как-нибудь опубликовать сообщение, чтобы выполнить функцию при получении сообщения.
В противном случае есть простая очередь (соответствующая блокировка, конечно). Добавьте достаточно данных в очередь, чтобы можно было вызывать main_thread_method. (аргументы и т. д.). Периодически опрашивать простую очередь на наличие новых сообщений в основном потоке и обрабатывать их.