2010-09-01 4 views
2

Je sais que c'est dangereux de manipuler streambuf pendant que async_write fonctionne comme indiqué par asio author sur boost mailing list. Ce que je veux savoir est, est-ce sûr de manipuler streambuf après async_read?Est-il sécuritaire de manipuler streambuf après avoir boost :: asio :: async_read?

Exemple:

async_read(socket_, recv_streambuf_, ...); 
// manipulated while async_read is working 
// for example, after I call async_read, 
recv_streambuf_.consume(2); 
// or something advance, like this... 
int var; 
std::istream recv_is(recv_streambuf_); 
recv_is >> var; 
+0

C'est une bonne question. Ma première supposition était que ce serait dangereux aussi, mais vous pouvez théoriquement lire à partir d'un streambuff tandis que quelque chose d'autre écrit à la fin de celui-ci. – Tomaka17

+1

pourquoi voulez-vous manipuler le streambuf pendant une opération async_read? –

+0

@sam bonne question. rappelle-moi que je peux faire async après avoir consommé tous les paquets entrants. la raison en est la concurrence. maintenant je pense, ça ne vaut pas la peine, je vais mettre le traitement avant la prochaine lecture asynchrone. – flamemyst

Répondre

1

Vous devriez être en mesure de faire ce que vous voulez avec le streambuf lorsque votre rappel async_read est exécuté. Le rappel nous permet de savoir quand asio a fini d'utiliser la mémoire.

Questions connexes