Раньше был один поток и такая конструкция работала, теперь появилась необходимость распределить нагрузку на несколько потоков, следовательно конструкция типа SomeClassHolder()->Instance()->SomeOtherFunction() не подходит. пока вижу 2 варианта решения.
1)Написать Singletone — который в зависимости от того из какого потока его вызвали будет возвращать соответствующий указатель.
— количество потоков константно не изменяется во время работы программы.
2)Передавать нужный объект в качестве параметра SomeOtherFunction(SomeClass &someclass);
Интересно может есть какиенить подводные камни которых я не вижу или другие интересные решения ?
Здравствуйте, ё-лка, Вы писали:
ЁЛ> SomeClassHolder()->Instance()->SomeOtherFunction();
Еще можно сделать SomeClass потоко-безопасным, и пусть все потоки работают с одним экземпляром.
Если нельзя — то потоково-локальный синглтон самое лучшее ИМХО, потребуется минимум изменений в существующем коде
Здравствуйте, ё-лка, Вы писали:
ЁЛ>1)Написать Singletone — который в зависимости от того из какого потока его вызвали будет возвращать соответствующий указатель. ЁЛ>— количество потоков константно не изменяется во время работы программы.
Очень неудобно отлаживать.
ЁЛ>2)Передавать нужный объект в качестве параметра SomeOtherFunction(SomeClass &someclass);
ИМО, это вариант получше будет.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, AndrewJD, Вы писали:
ЁЛ>>2)Передавать нужный объект в качестве параметра SomeOtherFunction(SomeClass &someclass); AJD>ИМО, это вариант получше будет.
+1
С одной поправкой.
Передавать нужно не SomeClass &someclass, а Context* context.
Где Context примерно такого вида:
А людей которые говорят что синглетоны рулят не слушай ибо синглетоны почти всегда создают проблемы (например в твоем случае) и никогда ничего не дают.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>С одной поправкой. WH>Передавать нужно не SomeClass &someclass, а Context* context.
WH>А людей которые говорят что синглетоны рулят не слушай ибо синглетоны почти всегда создают проблемы (например в твоем случае) и никогда ничего не дают.
Сейчас как раз занимаюсь тем что избавляюсь от синглетона который намертво связал несколько разных компонентов.
Так народ чтобы хоть как-то их по отдельности протестировать во всю использовал нездоровые хаки с дефайнами, неймспейсами и включением одного cpp файла в другой.
Сначала я хотел отрихтовать реализацию синглетона, чтобы можно было подпихнуть mock объект. Но теперь пришел к выводу что дешевле будет выкинуть его нах. и протянуть контест через пяток классов.
Так что, кто ищет изощренный трах — синглетоны ваш выбор!
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, WolfHound, Вы писали: WH>А людей которые говорят что синглетоны рулят не слушай ибо синглетоны почти всегда создают проблемы (например в твоем случае) и никогда ничего не дают.
В некоторых случаях singleton вполне уместен, была ветка