Bonjour,
Suite a un rapide détour par la Fac C++ pour trouver le moyen de pouvoir appeler une méthode d'une classe dans un Thread... Cependant je me retrouve alors avec une erreur de compilation qui m'est inconnue.
Voici les différentes parties nécessaires :
Main.cpp
affichage.cppCode:
1
2
3
4
5
6
7 int main(int argc, char **argv) { affichage aff(argc, argv); HANDLE thread_aff; thread_aff = CreateThread( NULL, 0, &affichage::LunchThread, &aff, 0, NULL ); // ... }
affichage.hCode:
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 // ... static DWORD WINAPI LunchThread( void *Param ) { affichage* Obj = reinterpret_cast<affichage*>( Param ); return Obj->start(); } DWORD affichage::start() { /* Creation de la fenetre */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(Win), 320, 200); gtk_window_set_title(GTK_WINDOW(Win), "Commande"); /* Creation du label */ Status = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(Status), "<b>Status</b> : Demarrage"); gtk_label_set_justify(GTK_LABEL(Status), GTK_JUSTIFY_LEFT); gtk_container_add(GTK_CONTAINER(Win), Status); /* Connexion du signal "destroy" */ g_signal_connect(G_OBJECT(Win), "destroy", G_CALLBACK(OnDestroy), NULL); gtk_widget_show_all(Win); /* Demarrage de la boucle evenementielle */ //HANDLE thread_aff; //thread_aff = CreateThread(NULL,0,&affichage::set_all,this,0,NULL); gtk_main(); return 0; } // ...
Et l'erreur de compilation :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // ... class affichage { private: GtkWidget *Win; GtkWidget *Status; public: affichage(int &argc, char** &argv); ~affichage(); DWORD set_all(); static DWORD WINAPI LunchThread(void *Param); void affichage::set_status(char *value); DWORD start(); }; // ...
Code:
1
2
3
4
5
6
7
8 Switching to target: default Compiling: main.cpp Compiling: classes\affichage.cpp Linking console executable: TPE.exe .objs\main.o:main.cpp:(.text+0x1c7): undefined reference to `_ZN9affichage11LunchThreadEPv@4' collect2: ld returned 1 exit status Process terminated with status 1 (0 minutes, 9 seconds) 0 errors, 0 warnings