Bien le bonjour,
je bosse sur raspbian stretch installé depuis noobs sur raspberry pi 3B.
Je développe une appli avec IHM glade+gtk3mm, en c++.
Je ne suis pas très à l'aise avec les termes à utiliser et suis plutôt débutant dans ces technologies.

J'ai déjà développé une appli dont le main se contentait, après qq initialisations, de lancer l'interface graphique. Puis toutes les actions étaient provoquées par des interruptions, de type timer ou de type hardware. Le main ressemblait à cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
/**************/
/* main         */
/**************/
int main (int argc, char *argv[])
{
  //auto app = Gtk::Application::create(argc, argv/*, "org.gtkmm.example"*/);
  auto app = Gtk::Application::create();
 
  //Load the GtkBuilder file and instantiate its widgets:
  auto refBuilder = Gtk::Builder::create();
  try{
    refBuilder->add_from_file("ihm.glade");
  }
  catch(const Glib::FileError& ex){
    std::cerr << "FileError: " << ex.what() << std::endl;
    return 1;
  }
  catch(const Glib::MarkupError& ex)
  {
    std::cerr << "MarkupError: " << ex.what() << std::endl;
    return 1;
  }
  catch(const Gtk::BuilderError& ex){
    std::cerr << "BuilderError: " << ex.what() << std::endl;
    return 1;
  }
 
  refBuilder->get_widget("main_window", p_main_window);
 
if(p_main_window){
    refBuilder->get_widget("button_Test", p_button_Test);
 
    refBuilder->get_widget("label_Connexion_reseau", p_label_Connexion_reseau);
    if(p_button_Test) p_button_Test->signal_clicked().connect( sigc::ptr_fun(on_button_test_clicked) );
 
    p_main_window->set_size_request(800,480);
    p_main_window->set_title("xx");
 //   p_graph_drawing_area->set_size_request(500,300);
 
  initPin(); //init les gpio
  initIsrIo(); //init ninterruption sur gpio
  signal(SIGALRM, sig_handler);  // init signal interruption sur timer
 
  p_date_label->set_label (horodatageDate());
  g_idle_add(IhmDateRefresh,0);
 
  g_timeout_add(1000, timer_1_s, 0);
  g_idle_add(initAll,0);
  ouvertureLogSession();
 
  app->run(*p_main_window);
 
  }
  }
 
  delete p_main_window;
  return 0;
}
Pour cette nouvelle appli, je suis très embêté du fait que l'appel est bloquant. En effet, je voudrais cette fois, après qq initialisations, lancer l'interface graphique puis passer au déroulé de mon programme, sans nécessité d'attendre une interruption pour le déclenchement.
Je ne sais pas comment m'y prendre. J'ai bien penser à lancer le run dans un autre thread, mais j'ai peur que ça complique beaucoup (en plus de lancer dans un autre thread, complique des mises à jour de l'interface depuis thread du main par exemple).

Il doit exister une façon de faire, propre, assez accessible, dont vous pourriez me donner le secret ?

J'espère avoir été clair.

Bonne journée