У меня странная проблема в С++ с этим кодом:
mutex_type list_mutex;
typedef list<char*> RQueue;
RQueue rQueue;
RQueue::reverse_iterator rstart, rend, last;
1 while(true) {
2 LockMutex(list_mutex);
3 rstart = rQueue.rbegin();
4 rend = rQueue.rend();
5 while( (rstart != rend) && (rstart != last) ) {
6 print *rstart;
7 }
8 last = rQueue.rbegin();
9 UnlockMutex(list_mutex);
10 }
rQueue
- это очередь, в которой я итерирую в обратном порядкеrQueue
может получать сообщения в любое время- Я добавил итератор
last
, чтобы избежать переделки с получением сообщения в строке 6 В строке 8 я сохраняю позицию, с которой я печатал сообщения, и я хочу печатать только те сообщения, которые новее последнего сообщения.
Моя проблема: когда итерация завершена и в очередь добавляются новые сообщения, значение итератора
last
изменяется, становясь таким же, как значение итератораrstart
, поэтому новые поступившие сообщения не печатаются в строке 6.
Я не знаю, почему last = rQueue.rbegin()
изменяет свое значение при получении новых элементов после разблокировки очереди.
Спасибо.
while
будет означать то же самое, если вы удалите две трети круглых скобок. - person Pete Becker   schedule 08.11.2013