All streams
Search
Write a publication
Pull to refresh
-4
0
Александр @kovalexius

User

Send message
А где нибудь есть список всех случаев UB со ссылками на стандарт?
Может от самого комитета?
Например:
— Изменение скалярного объекта между двумя точками следования более одного раза
— разыменование нулевого указателя
— переполнение знакового целочисленного
— Использование неинициализированной переменной.
и т.п.

Это en.cppreference.com/w/cpp/language/ub полный список?
И причём там «Infinite loop without side-effects»?
Просто нужно понять, что есть, например

    || strncmp(tx, "+Inf", 4) == 0 || strncmp(tx, "-Inf", 4) == 0
    || strncmp(tx, "+Nan", 4) == 0 || strncmp(tx, "-Nan", 4) == 0
    || strncmp(tx, "%nan", 4) == 0 || strncmp(tx, "%inf", 4) == 0


И выделить этот блок в отдельную функцию, назвав ее наиболее точно, например

bool isValueNonRationalNumeric(const std::string& _value)
{
  return strncmp(_value.c_str(), "+Inf", 4) == 0 || strncmp(_value.c_str(), "-Inf", 4) == 0 ||
         strncmp(_value.c_str(), "+Nan", 4) == 0 || strncmp(_value.c_str(), "-Nan", 4) == 0 ||
         strncmp(_value.c_str(), "%nan", 4) == 0 || strncmp(_value.c_str(), "%inf", 4) == 0;
}
Эмм…
а мне нужен планировщик расписания задач, но дело в том что по английски расписание — это 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.
Но где же мне такой неполярный конденсатор найти?
Такой большой емкости — все полярные, электролитические
Покажите, пожалуйста, использование regex (boost::match_results, boost::regex_match и т.п.) на примере работы с wchar_t строками (std::wstring)

P.S.
Прежде чем отписываться кэповскими советами, для начала попробуйте сами поменять std::string на std::wstring и собрать примеры.
А если у меня не MFC проект, но пользуюсь я всё равно Visual Studio?
Вопрос по boost'у всем кто может знать:
Как в boost'е называется «thread pool», но не Thread Pool — компонента, полностью скрывающая потоки, join'ы и т.п. многопоточные вещи, принимающая список (массив?) worker'ов?

Чего то там concurrent 'что-то', — не могу нагуглить.

PS:
Пишите все варианты, инфа будет полезна всем
Тогда Вам также должен быть отвратителен «Глубина резкости» эффект, применяющийся сейчас в каждой AAA класса игре.

Это один из критериев — почему я не люблю Black Desert.
Вообще то недостаток пробелов — единственный, не считая конечно же смехотворного аргумента, что исходные файлы с пробелами занимают больше места.))

Он заключается в том, что невозможно настроить отображение текста для конкретного разработчика.

Но это и не нужно, так как при работе с чужим кодом разработчик должен придерживаться стандартов кодирования принятых при разработке чужого кода (грубо говоря, если отступы занимают 4 пробела, то так надо, значит исходники того требуют), а если пишет свой код, то ничто не мешает использовать столько пробелов сколько считает нужным.

Однако есть очень важное и единственное преимущество пробелов перед табуляцией, возникающее при оформлении многострочных операторов. Многострочные конструкции принято форматировать по ширине.
Например:

int someFunction(const int         _in1,
                 const int         _in2,
                 const CObject&    _in3,
                 const CObjectDer& _in4,
                 CObject&          _out1,
                 CObjectDer&       _out2,
                 CObject&          _out3);

ширина табуляции — 4 пробела, при этом используются пробелы вместо символов Tab

При этом вы же не будете отрицать что для отображения исходного кода используются моноширинные шрифты, то есть шрифты с постоянной шириной (иначе в разных IDE творился бы полный ад независящий от использования пробелов или табуляций)

Представляете, как выглядел бы приведенный выше код, если бы он был оформлен табуляциями (+пробелами, без них всё равно никуда) с отличными от первоначальных настроек табуляции?

int someFunction(const int< <  _in1,
< < < <  const int< <  _in2,
< < < <  const CObject&< _in3,
< < < <  const CObjectDer& _in4,
< < < <  CObject&< <   _out1,
< < < <  CObjectDer& _out2,
< < < <  CObject&< <   _out3);

(1 табуляция — 2 пробела против 4-ех)

Аргументы поехали и уже не представлены в виде красивого столбика.

а если табуляцию увеличить?
Например 8 пробелов на таб?

int someFunction(const int<       <        _in1,
<       <       <       <        const int<       <        _in2,
<       <       <       <        const CObject&<       _in3,
<       <       <       <        const CObjectDer& _in4,
<       <       <       <        CObject&<       <         _out1,
<       <       <       <        CObjectDer& _out2,
<       <       <       <        CObject&<       <         _out3);


Аргументы уезжают за правую сторону редактора.
Мало этого — еще и нихрена непонятно.
Зачем такая радость?

Итого:
Единственный вменяемый способ оформления своих исходников для просмотра разными редакторами — это использование исключительно пробелов вместо табов.

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, что совсем не айс.

Тупиковая ситуация.
ппц быдлокодер.
я уж хотел написать что инициализацию
std::vector str =…
нада вынести за пределы цикла, хаха
путаюсь в трех строчках кода
Да? не думал что это принципиально. тогда
for(int i = 0; i <= 100; i++)
{
    if(i%3 == 0)
    {
       std::cout << "Fizz";
       if(i%5 == 0)
           std::cout << "Buzz";
       std::cout << std::endl;
       continue;
    }
    if(i%5 == 0)
    {
       std::cout << "Buzz" << std::endl;
       continue;
    }
    std::cout << i << std::endl;
}


А еще так можно, со строками уже с этим дурацкими:
#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, но она делает еще плюс ко всем другие действия, а мне надо просто отвязать процесс от сессии.
Заканчивается на октет 373, октет в IPv4 состоит из одного байта, один байт не может быть больше 255
for(int i = 0; i <= 100; i++)
{
    if(i%3 == 0)
    {
       std::cout << "Fizz" << std::endl;
       if(i%5 == 0)
           std::cout << "Buzz" << std::endl;
       continue;
    }
    if(i%5 == 0)
    {
       std::cout << "Buzz" << std::endl;
       continue;
    }
    std::cout << i << std::endl;
}
Тут два условных оператора и no strings.
В предудыдущем — бага (спешил очень)
если fuzzbuzz нада печатать при других условиях — то решение не подойдет.
for(int i = 0; i <= 100; i++)
{
    if(i%15 == 0)
    {
       if(i%3 == 0)
           std::cout << "Fizz" << std::endl;
       else
           std::cout << "Buzz" << std::endl;
       continue;
    }
    std::cout << i << std::endl;
}
for(int i = 0; i <= 100; i++)
{
    if(i%3 == 0)
       std::cout << "Fizz" << std::endl;
    if(i%5 == 0)
    {
       std::cout << "Buzz" << std::endl;
       continue;
    }
    std::cout << i << std::endl;
}

два условных оператора, два оператора сравнения и никаких телодвижений со строками
В 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() освобождает индекс.
— Произвольное количество потоков

Интересует как такой объект синхронизации называется, какие у него есть известные реализации, ссылки, статьи и т.п.

Information

Rating
Does not participate
Date of birth
Registered
Activity