Re: GTK+ threaded program segfaults
- From: Kevin DeKorte <kdekorte yahoo com>
- To: Luka Napotnik <luka napotnik gmail com>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: GTK+ threaded program segfaults
- Date: Thu, 10 Nov 2005 12:46:15 -0700
On Thu, 2005-11-10 at 20:09 +0100, Luka Napotnik wrote:
Hi.
I'm writing a multithreaded GTK+ program and have a problem. The program
segfaults at line:
window_main->this = gtk_window_new(GTK_WINDOW_TOPLEVEL);
What's wrong here?
Greets,
Luka
Works fine on FC4 when I compile it like this
gcc `pkg-config --libs --cflags gtk+-2.0 gthread-2.0` gtktest.c -o
gtktest
Kevin
The code:
============================================
#include <stdio.h>
#include <gtk/gtk.h>
/* The main window's menu items. */
GtkItemFactoryEntry window_main_menu_items[] = {\
{ "/File", NULL, NULL, 0, "<Branch>" },
{ "/File/Quit", NULL, NULL, 0, "<Item>" },
{ "/Help", NULL, NULL, 0, "<Branch>" },
{ "/Help/Manual", NULL, NULL, 0, "<Item>" },
{ "/Help/About", NULL, NULL, 0, "<Item>" }
};
struct _window_main {
GtkWidget *this;
GtkWidget *box_main, *box_content;
GtkWidget *button_exit;
GtkWidget *menubar;
GtkWidget *toolbar;
GtkWidget *label_start;
GtkWidget *toolbar_start;
};
struct _window_main *window_main;
/* This function code is copied from the GTK+ tutorial (www.gtk.org). */
static GtkWidget *get_menubar_menu( GtkWidget *window )
{
GtkItemFactory *item_factory;
GtkAccelGroup *accel_group;
static gint nmenu_items = sizeof (window_main_menu_items) /
sizeof (window_main_menu_items[0]);
/* Make an accelerator group (shortcut keys) */
accel_group = gtk_accel_group_new ();
/* Make an ItemFactory (that makes a menubar) */
item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
accel_group);
/* This function generates the menu items. Pass the item factory,
the number of items in the array, the array itself, and any
callback data for the the menu items. */
gtk_item_factory_create_items (item_factory, nmenu_items,
window_main_menu_items, NULL);
/* Attach the new accelerator group to the window. */
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
/* Finally, return the actual menu bar created by the item factory. */
return gtk_item_factory_get_widget (item_factory, "<main>");
}
gpointer thread_func(gpointer data)
{
g_print("Js sm pa thread");
}
void window_main_init()
{
window_main = g_malloc(sizeof(*window_main));
window_main->this = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window_main->this), "simos86");
gtk_window_set_default_size(GTK_WINDOW(window_main->this), 600, 500);
window_main->box_main = gtk_vbox_new(FALSE, 1);
window_main->menubar = get_menubar_menu(window_main->this);
gtk_box_pack_start(GTK_BOX(window_main->box_main),
window_main->menubar, FALSE, FALSE, 1);
window_main->toolbar = gtk_toolbar_new();
gtk_toolbar_append_item(GTK_TOOLBAR(window_main->toolbar), "Start",
"Start simulation", "None", NULL, NULL, NULL);
gtk_box_pack_start(GTK_BOX(window_main->box_main),
window_main->toolbar, FALSE, FALSE, 1);
gtk_container_add(GTK_CONTAINER(window_main->this),
window_main->box_main);
}
int main(int argc, char **argv)
{
gtk_init(&argc, &argv);
GThread *thread1;
g_thread_init(NULL);
window_main_init();
gtk_widget_show_all(GTK_WIDGET(window_main->this));
thread1 = g_thread_create(thread_func, NULL, FALSE, NULL);
gtk_main();
return 0;
}
============================================
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
--
Get my public GnuPG key from
http://keyserver.veridis.com:11371/export?id=7574690260641978351
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]