Bonjour, avec Qt la doc propose d'utiliser readDatagram() et writeDatagram() pour recevoir et envoyer des données sur le reseau (en UDP).
http://qt.developpez.com/doc/latest/qudpsocket.html

Or readDatagram() est appelé par un signal, et peut donc etre appelé n'importe quand, y compris pendant que je manipule mes données pour writeDatagram()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
connect(udpSocket, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));
Quelle solution élégante et portable me conseillez vous pour faire un accés exlusif, afin que les traitements de reception et d'expédition se fassent l'un après l'autre et pas en même temps ?

Dsant



Le code de l'exemple de Trolltech :
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
void Server::initSocket()
 {
     udpSocket = new QUdpSocket(this);
     udpSocket->bind(QHostAddress::LocalHost, 7755);
 
     connect(udpSocket, SIGNAL(readyRead()),
             this, SLOT(readPendingDatagrams()));
 }
 
 void Server::readPendingDatagrams()
 {
     while (udpSocket->hasPendingDatagrams()) {
         QByteArray datagram;
         datagram.resize(udpSocket->pendingDatagramSize());
         QHostAddress sender;
         quint16 senderPort;
 
         udpSocket->readDatagram(datagram.data(), datagram.size(),
                                 &sender, &senderPort);
 
         processTheDatagram(datagram);
     }
 }