Не получатся использовать GStaticMutex для защиты общего доступа потоками к drawingarea. Из GLib Reference Manual понял, что именно оно мне нужно (Gmutex или GStaticMutex) последний показался проще в использовании, хотя о том как оба они работают доходчивого описания не нашел. Делал, как в примерах в вышеуказанном мануале.
Несколько однотипных потоков пишут в drawingarea однотипные данные, вот часть потока:
static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
printf ("&mutex = %d", &mutex);
g_static_mutex_lock (&mutex);
gdk_draw_pixbuf (
pixmap,
gc_map,
pixbuf,
0,0,
data->offset_x,data->offset_y,
TILESIZE,TILESIZE,
GDK_RGB_DITHER_NONE, 0, 0);
drawingarea11 = lookup_widget(window1, "drawingarea1");
gtk_widget_queue_draw_area (
drawingarea11,
data->offset_x,data->offset_y,
TILESIZE,TILESIZE);
g_static_mutex_unlock (&mutex);
g_static_mutex_free (&mutex);
Потоки вызываются в цикле
for (i=tile_x0; i<(tile_x0+tiles_nx);i++)
{
for (j=tile_y0; j<(tile_y0+tiles_ny); j++)
{
if (!g_thread_create(&load_trf, thread_data, FALSE, NULL) != 0)
{
g_warning(«can't create DL thread»);
}
}}
Строки if (!g_thread_supported ()) g_thread_init (NULL);
gdk_threads_init ();
gdk_threads_enter ();
в main() имеются.
Помогите плз, кто с этим сталкивался.