如果我按原样编译并运行代码,则该进程将以1个线程运行。如果我取消注释注释掉的部分,然后编译并运行它,它将以2个线程运行。
我正在用这个命令编译代码:
g ++ pkg-config gtkmm-2.4 --cflags --libs
test.cpp
当程序运行时,我可以检查创建的线程数:
ps -mC a.out
如果我查看ddd中的第二个线程,我可以看到它正在运行g_main_loop_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);
}
答案 0 :(得分:1)
当您使用依赖异步行为的函数时,有时会创建GThread
。这些通常在内部创建GTask
(与g_task_run_in_thread
和朋友一起)并在单独的线程中运行同步版本(除了那些通常是异步或异步的,那些通常不会产生另一个线程) 。通常这是IO(即GtkBuilder),Socket和IPC(dbus)相关 - 所以主要是glib
。
可能还有一些我不知道的情况,那会产生额外的线程,mainloop本身就是严格的单线程。
因此,在您的情况下,我只能想到两个可以触发此事情的事情:从本地磁盘加载的Stock图像或主题的样式信息。