Имам следния клас:
После в програмата създавам един обект от този клас. Пускам 2 нишки: Едната пише а другата чете. Няколко пъти едната нишка пише. Напълва малко буфера. В следващия момент втората чете и го прочита успешно.
От там нататък, когато едната пише си добавя текст, всеки път и буфера расте.
ОБАЧЕ, когато втората нишка чете, в буфера НЯМА нищо! (Само първия път когато чете - има текст в буфера. След първото прочитане, все едно стават два различни буфера).
Някой имал ли е подобен проблем? Как се получава? Аз лично нямам никаква идея как се получава това.
Създавам само един обект. Обявил съм го глобално. Само че съм обявил указател и създавам обекта при инициализацията на прорамата. Обекта си е един и същ!
class Cmyclass { public: Cmyclass() { InitializeCriticalSection(m_cs); } ~Cmyclass() { DeleteCriticalSection(m_cs); } std::string read() { std::string strTemp; EnterCriticalSection(&m_cs); strTemp = m_strBuffer; m_strBuffer.clear(); return strTemp; LeaveCriticalSection(&m_cs); } void Write(std::string message) { EnterCriticalSection(&m_cs); m_strBuffer.append(message); LeaveCriticalSection(&m_cs); return; } private: CRITICAL_SECTION m_cs; std::string m_strBuffer; };
После в програмата създавам един обект от този клас. Пускам 2 нишки: Едната пише а другата чете. Няколко пъти едната нишка пише. Напълва малко буфера. В следващия момент втората чете и го прочита успешно.
От там нататък, когато едната пише си добавя текст, всеки път и буфера расте.
ОБАЧЕ, когато втората нишка чете, в буфера НЯМА нищо! (Само първия път когато чете - има текст в буфера. След първото прочитане, все едно стават два различни буфера).
Някой имал ли е подобен проблем? Как се получава? Аз лично нямам никаква идея как се получава това.
Създавам само един обект. Обявил съм го глобално. Само че съм обявил указател и създавам обекта при инициализацията на прорамата. Обекта си е един и същ!