Сообщение Re: Тестовое задание ... от 12.06.2015 22:21
Изменено 12.06.2015 22:22 tlp
Здравствуйте, Selavi, Вы писали:
S>...выполнено слабо
S>К сожалению, добиться обратной связи на тему "что именно слабо" не удалось.
S>Пожалуйста, покритикуйте реализацию.
1. комментариев нет от слова совсем
2.
int Size()
{
std::lock_guard<std::mutex> lock(this->mutex);
return container.size();
}
вместо int должен быть хотя бы size_t
3. TaskDer зачем-то засунут в Task.h
4. Смысл существования task.cpp непонятен, возникает вопрос понимает ли автор, что он делает. (хотя, наверное, это следствие п. 3)
5. использование голых указателей и C++0x в одном проекте. Трусы или крестик.
6.
CWorkThread::CWorkThread(IFinishClientTask *clientTaskFinisher)
: terminated(false)
, thread(&CWorkThread::ThreadFunc, this)
{
this->clientTaskFinisher = clientTaskFinisher;
}
непонятно зачем частично инициализируем обьект в init list, частично в теле конструктора.
7. Класс, в котором есть голые указатели (использование голых указателей и C++0x это вообще что-то, напонимающее анекдот про трусы и крестик) и отсутствие для этого класса copy ctor и operator=
8. \r\n вместо std::endl
9. Библиотечные классы, выводящие debug-данные на консоль без возможности отключения.
10. "не должно быть подвисших клиентов даже если клиентов больше, чем потоков" — требование, которое невозможно соблюсти в текущей формулировке задания и API. Ваш код и комментарии не говорят об этом ни слова, вместо этого вы придумали эвристику, которая не работает.
S>...выполнено слабо
S>К сожалению, добиться обратной связи на тему "что именно слабо" не удалось.
S>Пожалуйста, покритикуйте реализацию.
1. комментариев нет от слова совсем
2.
int Size()
{
std::lock_guard<std::mutex> lock(this->mutex);
return container.size();
}
вместо int должен быть хотя бы size_t
3. TaskDer зачем-то засунут в Task.h
4. Смысл существования task.cpp непонятен, возникает вопрос понимает ли автор, что он делает. (хотя, наверное, это следствие п. 3)
5. использование голых указателей и C++0x в одном проекте. Трусы или крестик.
6.
CWorkThread::CWorkThread(IFinishClientTask *clientTaskFinisher)
: terminated(false)
, thread(&CWorkThread::ThreadFunc, this)
{
this->clientTaskFinisher = clientTaskFinisher;
}
непонятно зачем частично инициализируем обьект в init list, частично в теле конструктора.
7. Класс, в котором есть голые указатели (использование голых указателей и C++0x это вообще что-то, напонимающее анекдот про трусы и крестик) и отсутствие для этого класса copy ctor и operator=
8. \r\n вместо std::endl
9. Библиотечные классы, выводящие debug-данные на консоль без возможности отключения.
10. "не должно быть подвисших клиентов даже если клиентов больше, чем потоков" — требование, которое невозможно соблюсти в текущей формулировке задания и API. Ваш код и комментарии не говорят об этом ни слова, вместо этого вы придумали эвристику, которая не работает.
Re: Тестовое задание ...
Здравствуйте, Selavi, Вы писали:
S>...выполнено слабо
S>К сожалению, добиться обратной связи на тему "что именно слабо" не удалось.
S>Пожалуйста, покритикуйте реализацию.
1. комментариев нет от слова совсем
2.
int Size()
{
std::lock_guard<std::mutex> lock(this->mutex);
return container.size();
}
вместо int должен быть хотя бы size_t
3. TaskDer зачем-то засунут в Task.h
4. Смысл существования task.cpp непонятен, возникает вопрос понимает ли автор, что он делает. (хотя, наверное, это следствие п. 3)
5. использование голых указателей и C++0x в одном проекте. Трусы или крестик.
6.
CWorkThread::CWorkThread(IFinishClientTask *clientTaskFinisher)
: terminated(false)
, thread(&CWorkThread::ThreadFunc, this)
{
this->clientTaskFinisher = clientTaskFinisher;
}
непонятно зачем частично инициализируем обьект в init list, частично в теле конструктора.
7. Класс, в котором есть голые указатели и отсутствие для этого класса copy ctor и operator=
8. \r\n вместо std::endl
9. Библиотечные классы, выводящие debug-данные на консоль без возможности отключения.
10. "не должно быть подвисших клиентов даже если клиентов больше, чем потоков" — требование, которое невозможно соблюсти в текущей формулировке задания и API. Ваш код и комментарии не говорят об этом ни слова, вместо этого вы придумали эвристику, которая не работает.
S>...выполнено слабо
S>К сожалению, добиться обратной связи на тему "что именно слабо" не удалось.
S>Пожалуйста, покритикуйте реализацию.
1. комментариев нет от слова совсем
2.
int Size()
{
std::lock_guard<std::mutex> lock(this->mutex);
return container.size();
}
вместо int должен быть хотя бы size_t
3. TaskDer зачем-то засунут в Task.h
4. Смысл существования task.cpp непонятен, возникает вопрос понимает ли автор, что он делает. (хотя, наверное, это следствие п. 3)
5. использование голых указателей и C++0x в одном проекте. Трусы или крестик.
6.
CWorkThread::CWorkThread(IFinishClientTask *clientTaskFinisher)
: terminated(false)
, thread(&CWorkThread::ThreadFunc, this)
{
this->clientTaskFinisher = clientTaskFinisher;
}
непонятно зачем частично инициализируем обьект в init list, частично в теле конструктора.
7. Класс, в котором есть голые указатели и отсутствие для этого класса copy ctor и operator=
8. \r\n вместо std::endl
9. Библиотечные классы, выводящие debug-данные на консоль без возможности отключения.
10. "не должно быть подвисших клиентов даже если клиентов больше, чем потоков" — требование, которое невозможно соблюсти в текущей формулировке задания и API. Ваш код и комментарии не говорят об этом ни слова, вместо этого вы придумали эвристику, которая не работает.