А где нибудь есть список всех случаев UB со ссылками на стандарт?
Может от самого комитета?
Например:
— Изменение скалярного объекта между двумя точками следования более одного раза
— разыменование нулевого указателя
— переполнение знакового целочисленного
— Использование неинициализированной переменной.
и т.п.
Эмм…
а мне нужен планировщик расписания задач, но дело в том что по английски расписание — это scheduler и планировщик — это scheduler, и вот я нагуглил Вашу статью. Тема конечно интересная, но не совсем то, что мне в данный момент нужно (а тут речь скорее идет о пуле задач и потоков или о задаче «Round-robin» https://ru.wikipedia.org/wiki/Round-robin_(%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC) )
А мне нужно такое:
добавлять задачу и время её выполнения (или периодичность — не суть) Ну и компонента уже сама выполняет добавленные задачи когда наступает время X. Своеобразный крон такой.
Есть ли готовые решения в бусте? Ну или как с минимальным велосипедизмом люди делают?
Я немного не понимаю. А полярные конденсаторы подходят для звуковых частот?
Ведь звуковая частота — это если выразиться по простому то плюс то минус. А конденсатор рассчитан только на плюс скажем. А минус (пусть даже небольшие напряжение) вреден. По любасе получается что полярный кондер обрезает половину всех полуволн (например отрицательных). А если мне надо например на вход конденсатор поставить, чтобы высокое напряжение в источник сигнала не шло, но чтобы звуковой сигнал проходил, начиная скажем с 15 Гц, тогда нужен конденсатор порядка 100 uF.
Но где же мне такой неполярный конденсатор найти?
Такой большой емкости — все полярные, электролитические
Вопрос по boost'у всем кто может знать:
Как в boost'е называется «thread pool», но не Thread Pool — компонента, полностью скрывающая потоки, join'ы и т.п. многопоточные вещи, принимающая список (массив?) worker'ов?
Чего то там concurrent 'что-то', — не могу нагуглить.
Вообще то недостаток пробелов — единственный, не считая конечно же смехотворного аргумента, что исходные файлы с пробелами занимают больше места.))
Он заключается в том, что невозможно настроить отображение текста для конкретного разработчика.
Но это и не нужно, так как при работе с чужим кодом разработчик должен придерживаться стандартов кодирования принятых при разработке чужого кода (грубо говоря, если отступы занимают 4 пробела, то так надо, значит исходники того требуют), а если пишет свой код, то ничто не мешает использовать столько пробелов сколько считает нужным.
Однако есть очень важное и единственное преимущество пробелов перед табуляцией, возникающее при оформлении многострочных операторов. Многострочные конструкции принято форматировать по ширине.
Например:
int someFunction(const int _in1,
const int _in2,
const CObject& _in3,
const CObjectDer& _in4,
CObject& _out1,
CObjectDer& _out2,
CObject& _out3);
ширина табуляции — 4 пробела, при этом используются пробелы вместо символов Tab
При этом вы же не будете отрицать что для отображения исходного кода используются моноширинные шрифты, то есть шрифты с постоянной шириной (иначе в разных IDE творился бы полный ад независящий от использования пробелов или табуляций)
Представляете, как выглядел бы приведенный выше код, если бы он был оформлен табуляциями (+пробелами, без них всё равно никуда) с отличными от первоначальных настроек табуляции?
Аргументы уезжают за правую сторону редактора.
Мало этого — еще и нихрена непонятно.
Зачем такая радость?
Итого:
Единственный вменяемый способ оформления своих исходников для просмотра разными редакторами — это использование исключительно пробелов вместо табов.
P.S.
Для тех кто в танке:
Необязательно жмакать 2/4/6/8 раз клавишу пробела для оформления отступа, достаточно настроить свой редактор на выставление пробелов при нажатии на клавишу Tab.
Например в VS он настраивается так:
TOOLS->Options...->Text Editor->C++->Tabs->Insert Spaces
И вот я столкнулся с Libfcgi по работе.
Необходимо написать сервис, который будет раздавать mpeg-ts по http.
mpeg-ts — бесконечен, это просто онлайн трансляция чего либо.
Но есть один нюанс: подключений может быть сколько угодно.
А тут получается, что я не могу в одном потоке начать новый request (typeof FCGX_Request ) не закончив старый, так как завершить соединение я могу только когда клиент отрубился или сервис остановился. (я ведь отдаю части Mpeg-ts по этому request'у)
Получается, что я должен заранее знать, сколько подключений будет и создать для каждого одновременного подключения свой поток со своим экземпляром FCGX_Request, что совсем не айс.
А еще так можно, со строками уже с этим дурацкими:
#include <iostream>
#include <vector>
#include <string>
int main()
{
for(int i = 1; i <= 100; i++)
{
std::vector<std::string> str = {std::to_string(i), "Fizz", "Buzz", "FizzBuzz"};
int ind = !(i%3) + (!(i%5)) * 2;
std::cout << str[ind] << std::endl;
}
}
Не правда ли изящно? (C++11 нужен)
Но не за 5 минут последнее решение реализовал. Сначала крутилась в голове чего то, потом только сформулировал принцип и алгоритм. Где то минут 10 — 15 наверно потратил чтобы полностью реализовать и проверить.
Быдлокодер, похоже, я. Либо пишу быстро код с кучей багов, либо трачу дофига времени.
Как научиться решать такие задачки за приемлемое время?
Такой вопрос:
Существует ли утилита, демонизирующая любой процесс, даже не демонизирущая его, а отвязывающая от текущей сессии (чтобы можно было удаленно запустить, например, cloud-mail.ru, затем закрыть сессию)?
Подсказка — есть такая утилита, называется spawn-fcgi, но она делает еще плюс ко всем другие действия, а мне надо просто отвязать процесс от сессии.
Тут два условных оператора и no strings.
В предудыдущем — бага (спешил очень)
если fuzzbuzz нада печатать при других условиях — то решение не подойдет.
В C++17 будет shared_mutex. Это то же самое что rwlock. Его свойства вполне известны — он позволяет захватываться в режиме shared и exclusive. Если захвачен в режиме shared, то при попытке захвата в режиме exclusive будет блокировка потока, однако остальные захваты в режиме shared не приводят к блокировке. Если захвачен в режиме exclusive, то любые последующие попытки захвата в любых режимах приведут к блокировке.
Существует множество алгоритмов (см. https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D1%85-%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D1%85)
В Windows (копать InitializeSRWLock()) и Linux (см pthread_rwlock) поддерживается нативно ОСью
Надеюсь кому нибудь будет полезно и познавательно.
Однако меня интересует следующий объект синхронизации:
— два метода lock( int index) и unlock( int index )
— если сначала был вызван метод lock( 1 ), а затем lock( 2) то есть если методы lock() вызываются с разными аргументами, то блокировки не происходит. Если аргументы совпадают, то последний вызвавший поток блокируется.
То есть блокировка происходит по индексу. Объект синхронизации хранит в себе индексы. Хранит в себе столько индексов, сколько потоков юзают этот Объект синхронизации.
— метод unlock() освобождает индекс.
— Произвольное количество потоков
Интересует как такой объект синхронизации называется, какие у него есть известные реализации, ссылки, статьи и т.п.
Может от самого комитета?
Например:
— Изменение скалярного объекта между двумя точками следования более одного раза
— разыменование нулевого указателя
— переполнение знакового целочисленного
— Использование неинициализированной переменной.
и т.п.
Это en.cppreference.com/w/cpp/language/ub полный список?
И причём там «Infinite loop without side-effects»?
И выделить этот блок в отдельную функцию, назвав ее наиболее точно, например
а мне нужен планировщик расписания задач, но дело в том что по английски расписание — это scheduler и планировщик — это scheduler, и вот я нагуглил Вашу статью. Тема конечно интересная, но не совсем то, что мне в данный момент нужно (а тут речь скорее идет о пуле задач и потоков или о задаче «Round-robin» https://ru.wikipedia.org/wiki/Round-robin_(%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC) )
А мне нужно такое:
добавлять задачу и время её выполнения (или периодичность — не суть) Ну и компонента уже сама выполняет добавленные задачи когда наступает время X. Своеобразный крон такой.
Есть ли готовые решения в бусте? Ну или как с минимальным велосипедизмом люди делают?
Ведь звуковая частота — это если выразиться по простому то плюс то минус. А конденсатор рассчитан только на плюс скажем. А минус (пусть даже небольшие напряжение) вреден. По любасе получается что полярный кондер обрезает половину всех полуволн (например отрицательных). А если мне надо например на вход конденсатор поставить, чтобы высокое напряжение в источник сигнала не шло, но чтобы звуковой сигнал проходил, начиная скажем с 15 Гц, тогда нужен конденсатор порядка 100 uF.
Но где же мне такой неполярный конденсатор найти?
Такой большой емкости — все полярные, электролитические
P.S.
Прежде чем отписываться кэповскими советами, для начала попробуйте сами поменять std::string на std::wstring и собрать примеры.
Как в boost'е называется «thread pool», но не Thread Pool — компонента, полностью скрывающая потоки, join'ы и т.п. многопоточные вещи, принимающая список (массив?) worker'ов?
Чего то там concurrent 'что-то', — не могу нагуглить.
PS:
Пишите все варианты, инфа будет полезна всем
Это один из критериев — почему я не люблю Black Desert.
Он заключается в том, что невозможно настроить отображение текста для конкретного разработчика.
Но это и не нужно, так как при работе с чужим кодом разработчик должен придерживаться стандартов кодирования принятых при разработке чужого кода (грубо говоря, если отступы занимают 4 пробела, то так надо, значит исходники того требуют), а если пишет свой код, то ничто не мешает использовать столько пробелов сколько считает нужным.
Однако есть очень важное и единственное преимущество пробелов перед табуляцией, возникающее при оформлении многострочных операторов. Многострочные конструкции принято форматировать по ширине.
Например:
ширина табуляции — 4 пробела, при этом используются пробелы вместо символов Tab
При этом вы же не будете отрицать что для отображения исходного кода используются моноширинные шрифты, то есть шрифты с постоянной шириной (иначе в разных IDE творился бы полный ад независящий от использования пробелов или табуляций)
Представляете, как выглядел бы приведенный выше код, если бы он был оформлен табуляциями (+пробелами, без них всё равно никуда) с отличными от первоначальных настроек табуляции?
(1 табуляция — 2 пробела против 4-ех)
Аргументы поехали и уже не представлены в виде красивого столбика.
а если табуляцию увеличить?
Например 8 пробелов на таб?
Аргументы уезжают за правую сторону редактора.
Мало этого — еще и нихрена непонятно.
Зачем такая радость?
Итого:
Единственный вменяемый способ оформления своих исходников для просмотра разными редакторами — это использование исключительно пробелов вместо табов.
P.S.
Для тех кто в танке:
Необязательно жмакать 2/4/6/8 раз клавишу пробела для оформления отступа, достаточно настроить свой редактор на выставление пробелов при нажатии на клавишу Tab.
Например в VS он настраивается так:
TOOLS->Options...->Text Editor->C++->Tabs->Insert Spaces
Необходимо написать сервис, который будет раздавать mpeg-ts по http.
mpeg-ts — бесконечен, это просто онлайн трансляция чего либо.
Но есть один нюанс: подключений может быть сколько угодно.
А тут получается, что я не могу в одном потоке начать новый request (typeof FCGX_Request ) не закончив старый, так как завершить соединение я могу только когда клиент отрубился или сервис остановился. (я ведь отдаю части Mpeg-ts по этому request'у)
Получается, что я должен заранее знать, сколько подключений будет и создать для каждого одновременного подключения свой поток со своим экземпляром FCGX_Request, что совсем не айс.
Тупиковая ситуация.
я уж хотел написать что инициализацию
std::vector str =…
нада вынести за пределы цикла, хаха
путаюсь в трех строчках кода
А еще так можно, со строками уже с этим дурацкими:
Не правда ли изящно? (C++11 нужен)
Но не за 5 минут последнее решение реализовал. Сначала крутилась в голове чего то, потом только сформулировал принцип и алгоритм. Где то минут 10 — 15 наверно потратил чтобы полностью реализовать и проверить.
Быдлокодер, похоже, я. Либо пишу быстро код с кучей багов, либо трачу дофига времени.
Как научиться решать такие задачки за приемлемое время?
Существует ли утилита, демонизирующая любой процесс, даже не демонизирущая его, а отвязывающая от текущей сессии (чтобы можно было удаленно запустить, например, cloud-mail.ru, затем закрыть сессию)?
Подсказка — есть такая утилита, называется spawn-fcgi, но она делает еще плюс ко всем другие действия, а мне надо просто отвязать процесс от сессии.
В предудыдущем — бага (спешил очень)
если fuzzbuzz нада печатать при других условиях — то решение не подойдет.
два условных оператора, два оператора сравнения и никаких телодвижений со строками
Существует множество алгоритмов (см. https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D1%85-%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D1%85)
В Windows (копать InitializeSRWLock()) и Linux (см pthread_rwlock) поддерживается нативно ОСью
Надеюсь кому нибудь будет полезно и познавательно.
Однако меня интересует следующий объект синхронизации:
— два метода lock( int index) и unlock( int index )
— если сначала был вызван метод lock( 1 ), а затем lock( 2) то есть если методы lock() вызываются с разными аргументами, то блокировки не происходит. Если аргументы совпадают, то последний вызвавший поток блокируется.
То есть блокировка происходит по индексу. Объект синхронизации хранит в себе индексы. Хранит в себе столько индексов, сколько потоков юзают этот Объект синхронизации.
— метод unlock() освобождает индекс.
— Произвольное количество потоков
Интересует как такой объект синхронизации называется, какие у него есть известные реализации, ссылки, статьи и т.п.