Ryner Reinhardt
ну, тогда в какой кодировке у тебя исходный файл?
Без понятия, я его через vim создал, но если писать на плюсах или на более высокоуровневых языках проблем таких не происходит
Ryner Reinhardt
А, ну это можно убрать
Ryner Reinhardt
Например?
Ryner Reinhardt
А как еще то?
Anonymous
Здравствуйте, не подкскажите библиотеки для Telegram на С++, пожалуйста
Ryner Reinhardt
За макс размер должна отвечать переменная tokensColumns
Aidar
это точно про.?
Aidar
с такими заявлениями вам в [беркусляндию](@supapro)
🦥Alex Fails
Неожиданно
Крылатый
Разрушительный сбой. Мне нравится)
🦥Alex Fails
Fatal error (?)
Anatoly
ошибку из messagebox можно положить в буфер обмена через Ctrl+C
Igor
есть bool flag;, который один поток единожды устанавливает в true, а второй многократно проверяет на == true я же правильно понимаю, что несмотря на кажущуюся "атомарность" флаг всё равно должен быть atomic<bool>, чтобы не навлечь UB и неправильную расстановку барьеров памяти?
Anonymous
хотя обновлений студии уже дофига было, они вряд ли его пофиксят
Anonymous
Из их форумов я понял, что баг висит уже несколько месяцев, но ещё не исправили
Anton
Но может и не помочь :)
Anton
если например читатель после чтения делает долгую работу, писатель может изменить атомик и, но читатель про это не узнает...
Anton
мьютекс правильней будет в таком случае
Anton
в процессе выполнения do_conditional_work(); flag может стать false
Anton
так как писателю никто не запрещает его поменять
Berkus
Но писать собираюсь лексер
на голых сях? маэстро знает толк в извращениях, возьми flex/bison
Anton
понятия не имею
Anton
ок или не ок определяет автор программы...
Anton
я к тому что если повесить lock_guard на мьютекс в цикле читателя и лочить этот же мьютекс в писателе при смене флага, таких эффектов не будет
Anton
инвариант будет сохранен
Anton
замена bool на atomic<bool> 99% ничего здесь не даст
Igor
мне нужно из одного треда в вечном цикле, просигнализировать другому треду в вечном цикле, что программа перешла в состояние X и в нём останется до конца времён; второй тред после такого перехода должен начать выполнять дополнительные действия постоянно лочить мьютекс ради изменяющихся ровно единожды данных выглядит ещё большим оверкиллом, чем атомик
🐙 Antony
Но писать собираюсь лексер
А зачем? Есть же готовые инструменты, которые работают лучше
Alexander "SonnySlave"
замена bool на atomic<bool> 99% ничего здесь не даст
с чего бы это атомик не поможет?
Anton
сигнализируют при помощи conditional_variable
Igor
Дык атомарная переменная решит все проблемы
ну вот я к ней и склоняюсь) просто напрягла фраза Антона про "писатель может изменить атомик и, но читатель про это не узнает...", я решил что есть какой-то ещё подводный камень, которого я не вижу
Alexander "SonnySlave"
сигнализируют при помощи conditional_variable
ну как он узнает о том, что переменная изменилась - отдельный вопрос
Alexander "SonnySlave"
пусть хоть в цикле со слипом проверяет
Igor
сигнализируют при помощи conditional_variable
это в том случае, если второй поток должен заснуть и ждать события, у меня другой случай
Igor
там есть еще std::atomic_flag
...ололо, спасибо
Aidar
вангую изобретение std::future
Aidar
atomic_flag гарантировано локфри
Igor
вангую изобретение std::future
сванговал мимо, тут скорее изобретение одноразового сигнала-слота, чтобы уведомить гуй приложения о том, что аппаратный видеодекодер отрендерил первый кадр видеопотока, и с экрана можно снимать превьюшку
Anton
Читатель узнает, на то переменная и атомарная
понятное дело узнает пока крутится while(true) но когда зашел в do_work(); flag могут сменить, он же не залочен
Igor
так вроде не мимо
future это разве не про auto f = start_work([]{ ... }); do_some_stuff(); f.wait_for_finish(),
Aidar
почти
Aidar
это очередь на 1 элемент который еще и состояние окончания работы
Aidar
он может быть void
Aidar
и еще оно может в эксепшны
Igor
http://en.cppreference.com/w/cpp/thread/call_once ?
аммм... в тред с декодером передать из гуя лямбду, которая выставит в гуе once_flag, а декодер её вызовет когда нужно?
Igor
да-да, уже вкурил, спс
Igor
кондвар позволяет просто проверять значение, без ожидания на себе?
Berkus
нет, он засыпает пока ему не посигналят
Berkus
а вообще атомик с заборами тут достаточен если тебе засыпать не надо
Berkus
просто про заборы не забывай
Igor
memory fence / memory barrier
Vsevolod
а зачем забор для атомика?
Vsevolod
ну то есть, оно же само должно ставиться в зависимости от memory model
Berkus
а зачем забор для атомика?
там при операциях чтения и записи можно указывать желаемый ордеринг, вот его надо указывать
Vsevolod
а, я думал, ты советуешь напрямую mfence/lfence звать
Vsevolod
незачем, это вредный совет
Vsevolod
@Artalus http://preshing.com/20120710/memory-barriers-are-like-source-control-operations/ - хорошая статья
Vsevolod
что значит "атомик сам забор"
Igor
спасибо, заценю
Berkus
это не всегда тот забор, который нужен
🦥Alex Fails
все равно до конца не въехал, как работает забор 😂 надо покурить маны
🦥Alex Fails
у Уильямса в книге тема была, и в других источниках тоже, но все равно не до конца въехал в заборы
🦥Alex Fails
ага, спасибо, да, я понял сразу всё
🦥Alex Fails
это все тяжелое наследие винды типа такого. там таких штук, как забор не было ))
🦥Alex Fails
ок, супер
Berkus
я где-то схоронял, если найду скину