Re[16]: Тестовое задание ...
От: Selavi  
Дата: 16.06.15 19:26
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Проблемы это же не только явные баги, но и неудачные технические решения. Например выше говорили про лишний поток, или проблемы с жизненным циклом объектов — это вполне объективные недостатки, а не "просто оформление". А не следование API заданному в ТЗ — вообще выглядит как намеренная диверсия.


В реальной разработке этих недостатков не было бы. Может кроме лишнего потока, но не думаю, что это можно назвать серьезным недостатком. Впрочем давайте не будем об этом, поскольку выше все это обсудили много раз.

EP>Это не поможет, там остаётся возможность выполнения последнего задания дважды (даже не считая spurious wakeup).


Вот последняя версия рабочего метода потока. Разве тут есть вышеописанные проблемы?

void CWorkThread::ThreadFunc()
{
    std::unique_lock<std::mutex> lock(mutex);

    while (!this->terminated)
    {
        while (!this->task)
          cv.wait(lock);

        std::lock_guard<std::mutex> lockWorkFlag(busyFlag);

        try
        {
            std::cout << "Started  Client " + std::to_string(clientID)+" in workerThread " + std::to_string((int)this) + "\r\n";
            if (this->task)
                this->task->Execute();
        }
        catch (const std::exception &e)
        {
            //Log
        }

        this->task = nullptr;

        std::cout << "Finished Client " + std::to_string(clientID) + " in workerThread " + std::to_string((int)this) + "\r\n";

        clientTaskFinisher->FinishClientTask(clientID);
    }
}



EP>Только что скачал этот файл заново:


Да, мой косяк) Я добавил код в деструктор уже после того, как выложил файл.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.