Прехвърляне към съдържание


Снимка

Проблем

C++

  • Моля, влезте, за да отговорите
4 отговора по тази тема

#1 Sasho851

Sasho851

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 102 мнения
  • Пол:Мъж
  • Живущ в:София
  • Интереси:HAARP

Публикувано: 02 May 2012 - 11:04

Имам следния клас:


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 нишки: Едната пише а другата чете. Няколко пъти едната нишка пише. Напълва малко буфера. В следващия момент втората чете и го прочита успешно.
От там нататък, когато едната пише си добавя текст, всеки път и буфера расте.
ОБАЧЕ, когато втората нишка чете, в буфера НЯМА нищо! (Само първия път когато чете - има текст в буфера. След първото прочитане, все едно стават два различни буфера).

Някой имал ли е подобен проблем? Как се получава? Аз лично нямам никаква идея как се получава това.
Създавам само един обект. Обявил съм го глобално. Само че съм обявил указател и създавам обекта при инициализацията на прорамата. Обекта си е един и същ!
Microsoft и всички останали...

#2 Sasho851

Sasho851

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 102 мнения
  • Пол:Мъж
  • Живущ в:София
  • Интереси:HAARP

Публикувано: 03 May 2012 - 15:27

Реших си проблема. Имало е грешка.
Как да изтрия тази тема?
Microsoft и всички останали...

#3 as9993

as9993

    Потребител

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 695 мнения
  • Пол:Мъж

Публикувано: 03 May 2012 - 16:04

Може да напишеш решението на проблема, за да може хора, изпаднали в трудности, като теб да си решат и те проблема.

"Родена в пъкъла музика се е разцъкала, като вълна избута боклука в ъгъла"


#4 s.feradov

s.feradov

    Потребител

  • Глобални модератори
  • ПипПипПипПипПипПип
  • 1603 мнения
  • Пол:Мъж

Публикувано: 03 May 2012 - 18:26

Хубаво ще е да споменете решението на проблема, както е предложил as9993.

Темата няма да бъде изтрита, тъй като може да бъде от помощ на други потребители, които са се сблъскали със същия или почти същия проблем. Вашето мнение може да съкрати необходимото време за разрешаването му.

"There isn't a person anywhere who isn't capable of doing more than he thinks he can." - Henry Ford


#5 Sasho851

Sasho851

    Потребител

  • Потребители
  • ПипПипПипПипПипПип
  • 102 мнения
  • Пол:Мъж
  • Живущ в:София
  • Интереси:HAARP

Публикувано: 29 May 2012 - 11:06

Ами как да ви кажа. Проблемът въобще не е в този код. На друго място в програмата се създава нов обект, след което вече, се чете от втория обект, а се пише в първия.

ВИНАГИ ОГЛЕЖДАЙТЕ СЪЗДАВАНЕТО НА ОБЕКТИТЕ. ВНИМАВАЙТЕ ДА НЕ ПРАВИТЕ КОПИЯ. КАТО НАПРИМЕР:

class CData
{
public:
DataArray GetHandleToDataArray()
{
return m_Data; // Ето тук, например, се връща копие.
}

private:
DataArray m_Data;
}

А трябва да бъде:

DataArray * GetHandleToDataArray()
{
return &m_Data;
}

Така, например, си вземаме указател. За да аксесваме правилната структура.
Microsoft и всички останали...





Други теми с тагове C++

0 потребители четат тази тема

0 регистрирани потребители, 0 гости и 0 анонимни потребители