RazrFalcon, логика поведения мне как раз понятно, у меня были проблемы с реализацией именно на GTK. Но в итоге я справился с проблемой, привожу примерный код: может кому еще пригодится, во всяком случае я больше нигде не встречал рассмотрения GTK progressbara в этом ключе:
void on_btncalc_clicked (GtkObject *object, gpointer user_data) //ф-я нажатия кнопки
{
g_thread_create_full(thread_func,user_data,0,TRUE,FALSE,G_THREAD_PRIORITY_LOW,&error); //порождаем поток
}
gpointer thread_func(gpointer data)
{
printf("сообщение из потока:\n");
long_time_func (pa1, pa2); //наша ф-я с циклом
g_thread_exit(GINT_TO_POINTER(10));
return NULL;
}
int long_time_func (int param1, int param2) //ф-я с долгим циклом
{
int i;
for(i=0; i<1000;++i)
{
/*действия над параметрами*/
gdk_threads_enter (); //приостанавливаем поток
gtk_progress_bar_set_fraction(progressbar1, i/1000); изменяем прогресбар на форме, следовательно наход. в др. потоке
gdk_flush();
gdk_threads_leave (); //запускаем поток дальше
}
return 0;
}