Bonsoir a tous,

J'utilise un thread pour recevoir des messages UDP que je stocke dans une liste chainée. Tout se passe bien. Voici le code :
PS : Les threads utilisés sont les threads windows (CreateThread...)

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
 
struct timeval tv;  
tv.tv_sec = 0;		//timeout in seconds
tv.tv_usec = 100; //timeout in micorseconds
Message_Struct * myMessage = (Message_Struct*)malloc(sizeof(Message_Struct));
while ( stopRequired == 0 ) {		
                FD_ZERO(&readfs);		
		FD_SET(mySocket, &readfs);
		if(select(mySocket + 1,&readfs,NULL,NULL,&tv)){
                        // Error check
                }
		// Check if there is available data 
		if(FD_ISSET(mySocket,&readfs)){ // Utilisation des descripteur non nécessaire puisque thread uniquement pour la récetpion
			// Copy them
			byteLength = recvfrom(mySocket, (char*)myMessage, sizeof(Message_Struct),0,(SOCKADDR*)&fromAddress,&fromAddressLength);       
			if(byteLength > 0){
				// Get the linked list node where to store it
				msg = getMessageStorage(myMessage->Signature);				
				if(msg != 0){				 
					memcpy(msg,myMessage,sizeof(Message_Struct));						
				}			
			}
		}
    }
J'ai 2-3 questions :
- pourriez vous me confirmer que l'utilisation de descripteur ici ne sert a rien, puisque le thread est uniquement créé pour récupérer les messages recu, et les stocker dans une liste chainée ? Qu'en est il de la charge du processeur ? J'ai besoin que ce thread soit aussi léger que possible.

- Je voudrais remplacer memcpy par un echange de pointeur pour gagner en vitesse. En échangeant le pointeur du message recu myMessage dans le recvfrom avec celui de la liste chaînée. Du genre, remplacer le memcpy par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
LinkedListNode* tmpNode = getListNode(myMessage->Signature);
if(tmpNode != NULL){
	Message_Struct  * tmpMsg = tmpNode->Message;
	tmpNode->Message = consumedExchange;
	myMessage = tmpMsg;
}
-Cela presenterai t-il réellement un gain de vitesse ? (Je pense que oui, l'interversion de pointeur me semblant plus rapide que le memcpy)
-Cela peut il présenter d'autres dangers ? Le message recu n'est accédé qu'en lecture...

Merci