Bonjour,
je vous pr�sente rapidement le contexte:
- je travaille avec Qt sous Debian pour une application console.
- Le programme doit g�rer un esclave modbus (donc un serveur) qui doit se mettre � l'�coute de toute requ�te. Comme l'attente est bloquante et que je ne veux pas bloquer la boucle de gestion des �v�nements de Qt, je compte ex�cuter l'�coute dans un thread.
- ci-dessous le bout de code de ma classe "Slave" en question:
Je re�ois plusieurs erreurs dont la 1�re est localis�e dans le fichier d'ent�te de la classe std::thread:
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 void Slave::listen(){ socket = modbus_tcp_listen(ctx, 1); // Attend une demande de connexion du client. connect(this, &Slave::requestGood, this, &Slave::incomingRequest); connect(this, &Slave::threadFinished, this, &Slave::connectionLost); std::thread requestThread(&Slave::waitForRequest); requestThread.detach(); } void Slave::waitForRequest(){ modbus_tcp_accept(ctx, &socket); // Le thread ne se termine pas et ne fait qu'attendre l'arrivée de requêtes int requestLength; for (;;){ do { requestLength = modbus_receive(ctx, query); qDebug() << "Longueur de la requête :" << requestLength; } while (requestLength == 0); if (requestLength == -1){ qDebug() << "Erreur dans la requête reçue ou perte de connexion"; qDebug() << errno << ": " << modbus_strerror(errno); if (errno == 104) // perte de la connexion break; // Termine le thread } emit requestGood(requestLength); } close(socket); // On ferme la socket ... // ... et le thread se termine emit threadFinished(); }
La ligne 39 du message d'erreur correspond � la ligne 6 de l'extrait de mon code ci-dessus.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 /usr/include/c++/8/thread:120: erreur : static assertion failed: std::thread arguments must be invocable after conversion to rvalues static_assert( __is_invocable<typename decay<_Callable>::type, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ typename decay<_Args>::type...>::value, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/8/thread:132: required from std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (Slave::*)(); _Args = {}; <template-parameter-1-3> = void] /home/pi/Programmes/testModbusSlave/modbusSlave/slave.cpp:39: required from here
Je n'arrive pas � interpr�ter cette erreur. Il me semble bien comprendre que c'est li� aux param�tre du thread, mais en l'occurrence je n'en ai pas.
Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.
Partager