the correct way to deal with gtk_events_pending and gtk_main_iteration
- by abd alsalam
I have program that send files and i want to make a progress bar for it, but that progress bar just updated after the transferring complete,so i putted a gtk_events_pending() and gtk_main_iteration() functions in the sending loop to go back to the gtk main loop to update the progress bar but also it seems to not work here is a
EDIT: the send function is in a separated thread
snippet from my code
float Percent = 0.0 ;
float Interval = 0.0 ;
the sending function
gint SendTheFile ( )
{
char FileBlockBuffer[512];
bzero(FileBlockBuffer, 512);
int FileBlockSize ;
FILE * FilePointer ;
int filesize = 0 ;
FilePointer = fopen(LocalFileName , "r");
struct stat st;
stat(LocalFileName, &st);
filesize = st.st_size;
Interval = (512 / (float)filesize) ;
while((FileBlockSize = fread(FileBlockBuffer,sizeof(char),512,FilePointer))>0)
{
send(SocketDiscriptor , FileBlockBuffer , FileBlockSize,0);
bzero(FileBlockBuffer, 512);
Percent = Percent + Interval ;
if (Percent > 1.0)Percent = 0.0;
while(gtk_events_pending() )
{
gtk_main_iteration();
}
}
update progress bar function
gint UpdateProgressBar(gpointer data)
{
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data),Percent);
}
updating progress bar in the main function
g_timeout_add(50,(GSourceFunc)UpdateProgressBar,SendFileProgressBar);