Stworzyłem sobie arcyprostą klasę do zrzucania logów do pliku (potrzebuję ją tymczasowo). Logi są zapisywane do tablicy w trakcie reagowania na różne komunikaty przez procedurę okna. Sam zapis do pliku jest przeprowadzany w momencie zamykania aplikacji. Problem w tym, że odkąd zacząłem zapisywać logi do tablicy moja aplikacja przestaje otrzymywać komunikaty od innych aplikacji LUB zaczyna ostro mulić.

Zacząłem śledzić kod, żeby zbadać, co jest główną przyczyną, bo wątpię by przyczyną było zapisywanie do tablicy kilku linijek tekstu w ciągu obsługi jednego komunikatu. I okazało się, że coś jest nie tak, gdy wywołam funkcję is_open()

void CLog::Add(string strText, UINT uId)
{
    //return; // Jesli odkomentowane to jest OK - aplikacja dziala prawidlowo.
    // Jesli zakomentuje to is_open() zaczyna powodowac problem.

    if (!logFile.is_open())
       return;
    // W tym momencie aplikacja przestaje otrzymywac komunikaty, nawet pomimo tego returna nizej...

    return; // Ten return oczywiscie do celow testowych.
    // Tutaj kod zapisujacy stringa do tablicy.
}

Konstruktor:

CLog::CLog(string strFilepath)
{
    logFile.open(strFilepath, ios::out | ios::app);
}

Wiem, że każdorazowe wywoływanie is_open() być może nie jest dobrym pomysłem i niektórzy woleliby sprawdzić to w konstruktorze a potem zapisać do zmiennej bool, ale tę sprawę pomińmy bo zastanawia mnie sam fakt, czemu to powoduje problem.

Co może być przyczyną?