Я ищу способ реализовать функциональный эквивалент invokeOnMainThread (C# xamarin)/runOnUiThread (android)/выполнитьSelectorOnMainThread: (цель C) в C/C++ на linux.Как реализовать функцию типа invokeOnMainThread() в C/C++ linux?
По существу, мне нужна функция, которая может быть вызвана из любого потока, к которому я передаю обработчик, который выполняется в основном потоке.
Я считаю, что это будет полезно в тех случаях, когда я хочу ограничить доступ к определенному ресурсу конкретному потоку (например, доступ к libmysql DB к основному потоку).
Что было бы изящным способом реализовать это? Как это делается в Android?
В C++, как о [контейнер] (http://en.cppreference.com/ w/cpp/container) с [функциями] (http://en.cppreference.com/w/cpp/utility/functional/function), которые только что вызвал нужный поток? В C легко реализовать что-то подобное с простым связанным списком и указателями функций. –
Требование Thjis требует какой-то сигнализации другим потокам - что-то, что «основной поток» часто ждет для ввода сообщений/объектов/указателей функций/lambadas/безотносительно. Если «основной поток» реализует какой-то цикл обработки сообщений (как во многих системах GUI), вы можете это сделать. Если нет, вы не можете, потому что «нормальный» механизм вызова/возврата функции на основе стека не может изменить контекст потока. –
В дополнение к тому, что указано выше, какова ваша «основная тема»? Используете ли вы какую-то структуру приложения? Если вы просто ищете возможность очереди обработчиков для выполнения в определенном потоке, то одним почти готовым способом будет использование C++ Boost.ASIO для создания пула потоков только с одним потоком. Затем вы можете отправить обработчики на него по мере необходимости, и все они будут выполнены на нужном потоке. –