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:
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();
 
}
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
/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
La ligne 39 du message d'erreur correspond � la ligne 6 de l'extrait de mon code ci-dessus.

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.