Jump to content

Проблем


Препоръчан пост

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

 

 

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
Сподели другаде

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

 

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

Link to comment
Сподели другаде

  • 4 weeks later...

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

 

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

 

class CData

{

public:

DataArray GetHandleToDataArray()

{

return m_Data; // Ето тук, например, се връща копие.

}

 

private:

DataArray m_Data;

}

 

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

 

DataArray * GetHandleToDataArray()

{

return &m_Data;

}

 

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

Link to comment
Сподели другаде

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...