Автоматический PY к EXE - .py к .exe преобразователю с помощью простого графического интерфейса, созданного с помощью Угря и PyInstaller в Python.
py2exe, вероятно, что Вы хотите, но это только работает над Windows.
PyInstaller работает над Windows и Linux.
Py2app работает над Mac
Используйте синглтон Мейерса. Если вы используете gcc, по крайней мере, инициализация является поточно-ориентированной.
class Singleton{
Singleton(){
//This is threadsafe in gcc, no mutex required
}
static Singleton * instance(){
static Singleton myinstance;
return &myinstance;
}
};
gcc охраняет статическую конструкцию локальных переменных, если вы не отключите ее с помощью -fno-threadsafe-statics, я недавно писал об этом здесь
В приложениях с потоками я предпочитаю использовать синглтоны с функцией initialize () и asserts, чтобы убедиться, что initialize () используется перед первым экземпляром (). Вызовите initialize () из основного потока. Я не думаю, что ленивое создание экземпляров действительно является ключевой особенностью синглтона, особенно для регистратора.
Хотя ответ Аркаитца более элегантен, мои ответы позволяют избежать проблем с потоковой передачей на всех платформах за счет стоимости 1 дополнительной функции и некоторого создания экземпляров проблемы во время запуска для синглтонов с зависимостями (чему способствуют утверждения и, конечно,: разумно используйте синглтоны).
Один из подходов - убедиться, что ваш первый доступ к регистратору происходит до того, как ваше приложение запустит второй поток. Обращаясь к синглтону в тот момент, когда вы ЗНАЕТЕ об отсутствии конкуренции, вы гарантируете, что последующие обращения всегда будут находить уже существующий объект, и вы должны полностью избежать проблемы.
Вам действительно не нужна отдельная функция Initialize () так как это просто испортит ваш одноэлементный интерфейс. Просто получите экземпляр синглтона
VERIFY(NULL != Logger::Instance());
, прежде чем любой другой поток получит к нему доступ.