Мне нужно иметь класс с одним действием, которое выполняется один раз в 5 секунд в своей собственной ветке. Это веб-сервис, поэтому ему необходимо указать конечную точку. Во время выполнения объекта основной поток может изменить конечную точку. Это мой класс:объект промежуточного процесса
Следует ли объявлять новый объект newEndpoint изменчивым? Я бы, конечно, сделал это, если бы чтение было в некотором цикле (чтобы заставить компилятора не оптимизировать его), но здесь я не знаю.
В каждом запуске функция activity()
проверяет наличие новой конечной точки (если там есть новая, затем передает ее клиенту и выполняет некоторые шаги повторного подключения) и выполняет свою работу.
void Worker::activity(void)
{
endpoint_mutex.lock(); //don't consider exceptions
std::auto_ptr<std::string>& ep = const_cast<std::auto_ptr<string> >(newEndpoint);
if (NULL != ep.get())
{
client.setEndpoint(*ep);
ep.reset(NULL);
endpoint_mutex.unlock();
client.doReconnectionStuff();
client.doReconnectionStuff2();
}
else
{
endpoint_mutex.unlock();
}
client.doSomeStuff();
client.doAnotherStuff();
.....
}
Я заблокировать мьютекс, что означает, что объект newEndpoint не может изменить больше, поэтому я удалить летучий спецификацию класса, чтобы иметь возможность ссылаться на Const методы.
Метод setEndpoint (вызывается из других потоков):
void Worker::setEndpoint(const std::string& endpoint)
{
endpoint_mutex.lock(); //again - don't consider exceptions
std::auto_ptr<std::string>& ep = const_cast<std::auto_ptr<string> >(newEndpoint);
ep.reset(new std::string(endpoint);
endpoint_mutex.unlock();
}
Является ли эта вещь поточно? Если нет, в чем проблема? Нужен ли мне новый объект newEndpoint?