Thanks, Alan. It compiles without errors. When run I get this error at the console:
Threads aren't supported! // c++ code begin // ----------------------------------------------------------- #include <gtkmm.h> #include <iostream> using namespace std; class myLabel: public Gtk::Window { // blah blah blah public: myLabel(); virtual ~myLabel(); protected: Gtk::Label m_label; string labeltext; string newtext; void myprocess1(void); }; myLabel::myLabel() : m_label("Hello World") { // myLabel.set_text("hello"); // This line gives errors (*1) void myprocess1(); set_title("Gtkmm Programming - C++"); add(m_label); m_label.show(); Glib::Thread::create(sigc::mem_fun(*this, &myLabel::myprocess1), true); cout << "Window should be displayed" << endl; } myLabel::~myLabel() { } void myLabel::myprocess1(void) { labeltext = "About to preform a number of processes.\n"; labeltext += "Each process may take up to three hours.\n"; labeltext += "Please carry your daily chores and wait.\n"; cout << labeltext << endl; m_label.set_text(labeltext); sleep(10); // Back from a three hour function newtext = "Back from a three hour function\n"; labeltext += newtext; m_label.set_text(labeltext); cout << newtext << endl; sleep(10); // Back from a three hour function newtext = "Back from another three hour function\n"; labeltext += newtext; m_label.set_text(labeltext); cout << newtext << endl; } int main(int argc, char* argv[]) { if (!Glib::thread_supported()) Glib::thread_init(); else { cerr << "Threads aren't supported!" << endl; exit(1); } Gtk::Main kit(argc, argv); myLabel mylabel; Gtk::Main::run(mylabel); return 0; } // ----------------------------------------------------------- // c++ code end -- L. James -- L. D. James lja...@apollo3.com www.apollo3.com/~ljames On Mon, 2013-08-05 at 08:18 -0700, Alan Mazer wrote: > Take a look at this. It still doesn't have dispatchers (I'm trying to > keep it simple). It's possible for this program to crash if you try to > interact with the window while it's updating. Dispatchers prevent > that. But this should be otherwise functional, and I didn't want adding > dispatchers to make understanding the thread concept more difficult. > Adding dispatchers is just one more step. > > All I did here was put your long-running computation into a secondary > thread, and have that thread update your label. > > The problem with your previous approach is that what "run" does is > display the window and label you've created and then wait for you to > interact with the window. If you put your computation *before* the > "run", the window won't be displayed until your computation ends. If you > put your computation *after" the "run", it won't be executed until you > close the window. > > You can also put your computation *in* the window creation, but this > means that the program won't be handling any user interactions during > your computation. If you cover the window with another window, for > example, and then uncover it again, it will probably be blank until your > computation is over. Or if you had a button in the window, button > presses would be ignored until the computation was over. > > What you want is for your computation to be going on at the same time as > "run" is handling user interaction, both of them working together. So > we create a "thread", which is a separate function that runs > simultaneously with the "run". > > I hope this helps. You probably want to switch from a label to > something with scroll bars. > > -- Alan >
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list