Если я скомпилирую и запущу код как есть, процесс будет работать с 1 потоком. Если я раскомментирую закомментированный раздел, а затем скомпилирую и запущу его, он будет работать с двумя потоками.
Я компилирую код с помощью этой команды: g++ pkg-config gtkmm-2.4 --cflags --libs
test.cpp
Когда программа запущена, я могу проверить, сколько потоков создано с помощью: ps -mC a.out
Если я посмотрю на второй поток в ddd, я увижу, что он работает g_main_loop_run
. Меня это смущает:
- Какова цель этой темы?
- Почему добавление кнопки на панель инструментов создает новую тему?
- Я думал, что g_main_loop_run() должен выполняться только в одном потоке (если только вы не используете макросы GDK_THREADS_ENTER/GDK_THREADS_LEAVE). Поскольку я запускаю Gtk::Main::Run() в своем основном потоке, нарушаю ли я правила?
Заранее благодарю за любую помощь. Это сводит меня с ума.
#include <gtkmm.h>
bool OnDeleteEvent(GdkEventAny* PtrGdkEventAny)
{
Gtk::Main::quit();
return(true);
}
void OnExecuteButtonClicked()
{
}
int main(int argc, char *argv[])
{
new Gtk::Main(0, NULL);
Gtk::Window *ptrWindow = new Gtk::Window;
ptrWindow->signal_delete_event().connect(sigc::ptr_fun(&OnDeleteEvent));
/*
Gtk::Toolbar *ptrToolBar = manage(new Gtk::Toolbar);
Gtk::ToolButton *ptrToolButton;
ptrToolButton = manage( new Gtk::ToolButton(Gtk::Stock::EXECUTE));
ptrToolBar->append(*ptrToolButton, sigc::ptr_fun(&OnExecuteButtonClicked));
ptrWindow->add(*ptrToolBar);
*/
ptrWindow->show_all();
Gtk::Main::run();
return (0);
}