Останавливаем потоки безопасно с std::jthread
Сейчас научимся правильно завершать потоки в C++. Без
Для начала подключим библиотеки. Чтобы код был короче, добавим using namespace std:
Теперь напишем рабочую функцию. Она будет печатать счётчик каждую секунду. Когда придёт сигнал остановки, поток завершится сам:
Запускаем поток через
Вот что выведет программа:
🔥 Таким образом ты можешь писать потоки проще — с автоматическим управлением и встроенной остановкой.
📣 C++ Ready | #практика
Сейчас научимся правильно завершать потоки в C++. Без
detach
, без ручного join
, без флагов. Для начала подключим библиотеки. Чтобы код был короче, добавим using namespace std:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
Теперь напишем рабочую функцию. Она будет печатать счётчик каждую секунду. Когда придёт сигнал остановки, поток завершится сам:
void worker(stop_token st) {
int tick = 0;
while (!st.stop_requested()) {
cout << "Tick " << tick++ << '\n';
this_thread::sleep_for(chrono::seconds(1));}
cout << "Поток завершён корректно.\n";
}
Запускаем поток через
jthread
. Ждём немного и просим его остановиться. Никаких join()
вызывать не нужно — всё делается автоматически:int main() {
jthread t(worker);
this_thread::sleep_for(chrono::seconds(3));
t.request_stop();
}
Вот что выведет программа:
Tick 0
Tick 1
Tick 2
Поток завершён корректно.
🔥 Таким образом ты можешь писать потоки проще — с автоматическим управлением и встроенной остановкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥10👍8😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍7❤6😁1
В этой задаче создаём консольную утилиту, которая переводит числовое значение из одной единицы измерения в другую прямо из терминала.
В этой задаче:
• Принимаем на вход 3 аргумента — число, исходную единицу и целевую единицу.
• Проверяем, что обе единицы входят в список поддерживаемых (m, cm, km, g, kg, l, ml).
• Используем unordered_map с коэффициентами и сначала переводим значение в базовую единицу, затем — в нужную.
Такой инструмент удобен, когда нужно быстро пересчитать метры в сантиметры, граммы в килограммы или литры в миллилитры, не покидая командную строку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7❤6🤝1
Убираем все пробелы из строки!
Сейчас научимся быстро удалять все пробельные символы (
Сначала подключим необходимые библиотеки из стандартной поставки:
Допустим, у нас есть строка с лишними пробелами и табуляцией:
Теперь удалим все пробельные символы с помощью одного вызова:
Результат при запуске программы:
🔥 Таким образом ты можешь быстро очищать строки от пробелов — без циклов, копий и лишнего кода.
📣 C++ Ready | #практика
Сейчас научимся быстро удалять все пробельные символы (
пробел
, таб
, перевод строки
) из строки. Это пригодится при парсинге ввода, чтении конфигов или очистке текстовых данных.Сначала подключим необходимые библиотеки из стандартной поставки:
#include <string>
#include <algorithm> // std::erase_if (C++20)
#include <cctype> // std::isspace
Допустим, у нас есть строка с лишними пробелами и табуляцией:
std::string raw = " Hello\tWorld \n ";
Теперь удалим все пробельные символы с помощью одного вызова:
std::erase_if(raw, [](unsigned char c) {
return std::isspace(c);
});
std::cout << raw << '\n';
Результат при запуске программы:
HelloWorld
🔥 Таким образом ты можешь быстро очищать строки от пробелов — без циклов, копий и лишнего кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🔥10👍8
С его помощью можно легко получать расширение файла, имя без пути, родительский каталог, заменять расширение, а также работать с путём в системном формате. Полезно при создании утилит, обработке файлов и написании кроссплатформенного кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍9❤8🤝5
В этой статье:
• Инициализация и отрисовка спрайтов в консоли без внешних библиотек
• Организация игрового цикла и логики с помощью контейнеров STL
• Обработка ввода, тайминга и коллизий в терминальной среде
🔊 Советую продолжить читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥7❤6
Консольная утилита, которая генерирует пароль заданной длины из выбранных групп символов прямо из терминала.
В этой задаче:
• Принимаем на вход строку вида <длина><группы>, например 12abd.
• Настраиваем генерацию случайных чисел для равномерного выбора символов из набора.
• Постепенно формируем строку нужной длины, выбирая случайные символы из набора, и выводим результат.
Такой инструмент удобен, когда нужно быстро получить надёжный пароль с нужными характеристиками прямо из командной строки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8❤7🤝1