dudev851 Публикувано Май 2, 2012 Report Share Публикувано Май 2, 2012 Имам следния клас: 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 нишки: Едната пише а другата чете. Няколко пъти едната нишка пише. Напълва малко буфера. В следващия момент втората чете и го прочита успешно.От там нататък, когато едната пише си добавя текст, всеки път и буфера расте.ОБАЧЕ, когато втората нишка чете, в буфера НЯМА нищо! (Само първия път когато чете - има текст в буфера. След първото прочитане, все едно стават два различни буфера). Някой имал ли е подобен проблем? Как се получава? Аз лично нямам никаква идея как се получава това.Създавам само един обект. Обявил съм го глобално. Само че съм обявил указател и създавам обекта при инициализацията на прорамата. Обекта си е един и същ! Цитирай Link to comment Сподели другаде More sharing options...
dudev851 Публикувано Май 3, 2012 Author Report Share Публикувано Май 3, 2012 Реших си проблема. Имало е грешка.Как да изтрия тази тема? Цитирай Link to comment Сподели другаде More sharing options...
as9993 Публикувано Май 3, 2012 Report Share Публикувано Май 3, 2012 Може да напишеш решението на проблема, за да може хора, изпаднали в трудности, като теб да си решат и те проблема. Цитирай Link to comment Сподели другаде More sharing options...
s.feradov Публикувано Май 3, 2012 Report Share Публикувано Май 3, 2012 Хубаво ще е да споменете решението на проблема, както е предложил as9993. Темата няма да бъде изтрита, тъй като може да бъде от помощ на други потребители, които са се сблъскали със същия или почти същия проблем. Вашето мнение може да съкрати необходимото време за разрешаването му. Цитирай Link to comment Сподели другаде More sharing options...
dudev851 Публикувано Май 29, 2012 Author Report Share Публикувано Май 29, 2012 Ами как да ви кажа. Проблемът въобще не е в този код. На друго място в програмата се създава нов обект, след което вече, се чете от втория обект, а се пише в първия. ВИНАГИ ОГЛЕЖДАЙТЕ СЪЗДАВАНЕТО НА ОБЕКТИТЕ. ВНИМАВАЙТЕ ДА НЕ ПРАВИТЕ КОПИЯ. КАТО НАПРИМЕР: class CData{public:DataArray GetHandleToDataArray(){ return m_Data; // Ето тук, например, се връща копие.} private:DataArray m_Data;} А трябва да бъде: DataArray * GetHandleToDataArray(){ return &m_Data;} Така, например, си вземаме указател. За да аксесваме правилната структура. Цитирай Link to comment Сподели другаде More sharing options...
Препоръчан пост
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.