On Monday 19 February 2007 12:42, SaiKamesh Rathinasabapathy wrote:
[snip]

This is your problem:

  Gtk::Main::run(obj.wind);// displaying the first window
  ^^^^^^^^^^^^^^
        char letter;
        while(!STOP)
        {

                if((letter=obj.rs_getch(port))>0)  // getting the data from the 
serial port
  charecter by charecter and storing those values in a charecter array.
                { 
                        buffer[i] = letter;
                        i++;

                }
                if(strlen(buffer) >= 119)
                {
                        temp = 1;
                        break;
                }

        }
        if(temp == 1)
        {
                obj.wind.hide();//here i want to close the first window, but it 
is not
                ^^^^^^^^^^^^^

Like practically all other GUI toolkits, GTK+ is event based.  
Gtk::Main::run() will start the event loop and block until something else 
causes it to unblock, such as the main window having Gtk::Widget::hide() 
called on it (or if you have called Gtk::Main::run(void) rather than 
Gtk::Main::run(Gtk::Window&), by calling Gtk::Main::quit()).

One quick hack is to move the code after your call to Gtk::Main::run up to an 
including Gtk:Widget::hide() into your main window's constructor (that will 
do if it does not take a long time to execute).  Otherwise the normal 
approach would be to read the serial port with a non-blocking read and plumb 
it into the main program loop with Gtk::signal_io() (see
http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/classGlib_1_1SignalIO.html
 ).
You will need a file descriptor to do that.  If you do not have a file 
descriptor, one less optimal choice is to set up a timeout and poll the 
serial port (with a non-blocking read) at regular intervals, appropriate to 
the likely data rate.

Chris

_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to