Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/55: Рейтинг темы: голосов - 55, средняя оценка - 4.78
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Потоки и асинхронность

25.03.2019, 11:47. Показов 12646. Ответов 100

Студворк — интернет-сервис помощи студентам
Если есть сервер то для каждого клиента было бы логично создавать отдельный поток,но проблема в том что это очень ресурснозатратно,каким образом сделать чтобы не создавать много потоков?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2019, 11:47
Ответы с готовыми решениями:

Потоки. Асинхронность
Уважаемые специалисты, помогите пожалуйста с определениями, прошу не давать ссылки на msdn, потому что уже все там перечитал, но вникнуть...

Потоки и асинхронность для бота в телеграмме
Здравствуйте! В двух словах, что делаю: пишу бота, играющего в города для telegram. Но вот проблема: все пользователи, пишущие боту,...

Асинхронность
Добрый день, у меня такая проблема. Создал поток, запустил его и программа заглючивает, но действие выполняет. Дело в том что сама...

100
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 22:28
Студворк — интернет-сервис помощи студентам
ReYalp, не путайте потоки и асинхронность. Для асинхронной работы с сетью достаточно и одного потока. Пул потоков нужен для распределения нагрузки по логическим процессорам.

Добавлено через 45 секунд
ЗЫ: В какие-то статьи на просторах интернета вникать нет желаения сейчас, без обид.

Добавлено через 9 минут
Если уж совсем на пальцах: в очередь попадают события о завершении асинхронных операций, свободные потоки последовательно забирают события и обрабатывают. В с одним потоком разница только в том, что поток один.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 22:28  [ТС]
shmkv, хорошо,вот тогда код с этой статьи :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (true)
{
    auto socket = Socket(localhost, port);
    socket.wait_connection(); // Всё ещё есть блокировка
    socket.async_read([](auto &data)
    /*
     * Поток не блокируется, лямбда-функция будет вызвана
     * каждый раз после получения новых данных из сокета,
     * а основной поток пойдёт создавать новый сокет и
     * ждать новое соединение.
     */
    {
        socket.async_write(data, [](auto &socket)
        {
            if (socket.end_of_connection())
            socket.close();
        });
 
    });
}
(Код взят с habr)
это пример callback функции,это же нормальный пример асинхронности?
И еще вопрос по поводу I/O CP ,собственно что это и для чего вообще это нужно? И чем отличается обычный TCP сервер с асинхронностью от сервера с IOCP?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 22:33
Цитата Сообщение от ReYalp Посмотреть сообщение
это же нормальный пример асинхронности?
А какой критерий нормальности? Тут вообще мешанина блокирующих и асинхронных функций.
Цитата Сообщение от ReYalp Посмотреть сообщение
собственно что это
Порты завершения ввода-вывода
Цитата Сообщение от ReYalp Посмотреть сообщение
и для чего вообще это нужно?
Например, для эффективной реализации серверов с высокой нагрузкой
Цитата Сообщение от ReYalp Посмотреть сообщение
И чем отличается обычный TCP сервер с асинхронностью от сервера с IOCP?
А что есть "обычный TCP сервер" в данном контексте?
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 22:46  [ТС]
shmkv,
Цитата Сообщение от shmkv Посмотреть сообщение
А какой критерий нормальности? Тут вообще мешанина блокирующих и асинхронных функций.
просто судя по всему тому что я сегодня читал в этом топике я не смог найти однозначого ответа и примера асинхронности,все спорили между собой и все,насчет нормальности я имел ввиду является ли это действительно асинхронностью или может вдруг у этого есть какое-то другое название?
Ну для меня обычный TCP сервер это просто сервер использующий TCP протокол для передачи данных ,и все.

Добавлено через 3 минуты
shmkv, просто я не совсем понимаю как асинхронность должна работать на серверер,допустим если сервер который принимает соединения от клиентов,у нас есть два метода send() и recv(), после каждого accept() они запускаются для клиента,а теперь как тут должна работать асинхронность? Допустим у нас подключилось 10 клиентов и все они "молчат" ,но вдруг 5-й по счету клиент решил сделать завпрос на сервер, тоесть в этот момент ассинхронно должен запуститься метод recv() на сервере для сокета этого клиента? Я правильно понимаю?

Добавлено через 3 минуты
shmkv, если да то выходит что метод recv() одновременно обслуживает 10 клиентов?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 22:51
Цитата Сообщение от ReYalp Посмотреть сообщение
просто судя по всему тому что я сегодня читал в этом топике я не смог найти однозначого ответа и примера асинхронности
В твоем примере блокирующее wait_connection и асинхронное чтение и запись в сокет.
А так можно почитать хотя бы https://habr.com/ru/post/192284/
Цитата Сообщение от ReYalp Посмотреть сообщение
Ну для меня обычный TCP сервер это просто сервер использующий TCP протокол для передачи данных ,и все.
Какое отношение протокол имеет к асинхронности? У вас каша в голове.

Добавлено через 3 минуты
Цитата Сообщение от ReYalp Посмотреть сообщение
shmkv, просто я не совсем понимаю как асинхронность должна работать на серверер,допустим если сервер который принимает соединения от клиентов,у нас есть два метода send() и recv(), после каждого accept() они запускаются для клиента,а теперь как тут должна работать асинхронность?

Цитата Сообщение от ReYalp Посмотреть сообщение
Допустим у нас подключилось 10 клиентов и все они "молчат" ,но вдруг 5-й по счету клиент решил сделать завпрос на сервер, тоесть в этот момент ассинхронно должен запуститься метод recv() на сервере для сокета этого клиента? Я правильно понимаю?
Придет событие из которого можно понять, что пришли данные на такое-то соединение. В терминах asio вызовется колбек со всеми нужными параметрами, чтобы понять что произошло.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 22:52  [ТС]
shmkv,
Цитата Сообщение от shmkv Посмотреть сообщение
Какое отношение протокол имеет к асинхронности? У вас каша в голове.

Я спросил какая разница между обычным TCP сервером и TCP сервером с IOCP,Вы спросили есть ли такое понятие обычный TCP сервер ,вот я Вам и дал ответ,ничего лишнего я не имел ввиду и никак не совмещал протокол и асинхронность,Вы опять меня не так поняли) Насчет IOCP я спрашивал какую роль играет этот порт на сервере,чем отличается "обычный" сервер с асинхронностью от сервера с IOCP?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 22:56
Цитата Сообщение от ReYalp Посмотреть сообщение
Я спросил какая разница между обычным TCP сервером и TCP сервером с IOCP,Вы спросили есть ли такое понятие обычный TCP сервер ,вот я Вам и дал ответ,ничего лишнего я не имел ввиду и никак не совмещал протокол и асинхронность,Вы опять меня не так поняли) Насчет IOCP я спрашивал какую роль играет этот порт на сервере,чем отличается "обычный" сервер с асинхронностью от сервера с IOCP?
Хорошо, поставлю вопрос иначе: с чего вы взяли что в IOCP сервере есть что-то необычное? Это одна из реализаций API, довольно удобная для масштабирования. В нет какой-то магии и чего-то такого чего нельзя было бы сделать иными средствами. Просто технология реализована на уровне ядра ОС, что повышает эффективность.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 23:01  [ТС]
shmkv, так в том то идело что я спрашиваю что это))) Я не понимаю что это и для чего оно нужно если есть ат же асинхронность,я спрашиваю именно чем он отличается чтобы узнать что это ,а не для того что я думаю что это что-то необычное,возможно после того как я получу ответ для чего iocp используется на сервере то я пойму что ничего необычного нету ) Кто знает

Добавлено через 1 минуту
shmkv,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define _WIN32_WINNT 0x0501
    
#include <boost/asio/io_service.hpp>
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>
 
// функция, которая должна исполнять какую либо задачу.
// для примера пусть просто выводит текст в консоль
void myTask(const char* msg)
{
    std::cout << msg << '\n';
}
 
int main()
{
//-------------------------------------------------------------------
    // --- функциональность тред-пула
    
    boost::asio::io_service ioService;
    boost::thread_group threadpool;
    boost::asio::io_service::work work(ioService);
 
    // забиваем пулл рабочими тредами
    // обычно - по количеству ядер процессора
    const auto cpu_count 
        = boost::thread::hardware_concurrency();
 
    for(size_t n = 0; n!=cpu_count; ++n)
        threadpool.create_thread(
            boost::bind(&boost::asio::io_service::run, &ioService)
        );
//-------------------------------------------------------------------
    
    // нагружаем тред задачами
    for(size_t n = 0; n!=10;++n)
        ioService.post(boost::bind(myTask, "Hello World!"));
 
    // останавливаем пулл
    ioService.stop();
    
    // ждем когда все треды остановятся
    threadpool.join_all();    
}
вот собственно пример кода который приводили в пример ,я вижу тут тред пул в котором есть потоки ,их количество равно количеству ядер,но это разве не обычная многопоточность? всеравно же каждый поток сможет обрабатывать только одно событие ,не так ли?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 23:06
Цитата Сообщение от ReYalp Посмотреть сообщение
shmkv, так в том то идело что я спрашиваю что это)))
Вы от меня ждете тут длинную простыню текста о описании IOCP? Нет, этого не будет, т. к. все можно найти по одноименному запросу, но я могу ответить на конкретные вопросы.
Цитата Сообщение от ReYalp Посмотреть сообщение
не понимаю что это и для чего оно нужно если есть ат же асинхронность
Что значит "ат"? IOCP это один из видов асинхронного API в Win32 (их там несколько и все самодостаточны).
ReYalp, мне кажется, что вы троллите, поэтому из темы пока выйду.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 23:09  [ТС]
shmkv, или будет просто замечательно если объяснить все на нужном примере ,как реализовать асинхронность вот на таком сервере где только один клиент
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "pch.h"
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <Windows.h>
#pragma comment (lib, "ws2_32.lib")
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
int main()
{
    WSADATA WsaData;
    int err = WSAStartup(0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
        printf("WSAStartup() failed: %ld\n", GetLastError());
        return 1;
    }
    SOCKET s;
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if ((s = socket(AF_INET, SOCK_STREAM, 0)) == 0)
    {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    SOCKADDR_IN sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(80);
    sin.sin_addr.s_addr = INADDR_ANY;
    bind(s, (LPSOCKADDR)&sin, sizeof(sin));
    listen(s, SOMAXCONN);
    SOCKET s1;
    SOCKADDR_IN from;
    int fromlen = sizeof(from);
    cout << "Ok" << endl;
    s1 = accept(s, (sockaddr*)&from, &fromlen);
    printf("accepted connection from %s, port %d\n", inet_ntoa(from.sin_addr), htons(from.sin_port));
    char * RecvBuffer  = new char;
    char SendBuffer[] = "Hello World!";
    ofstream file("file.txt", ios::out);
    recv(s1, RecvBuffer, 1024, 0);
    send(s1, &SendBuffer[0], strlen(SendBuffer),0);
    closesocket(s);
    closesocket(s1);
}

я бы мог создать два потока для send() и recv() но это же будет ресурснозатратно ,из-за этого прошу Вас показать на конкретном примере как реализовать вот эту асинхронность хотя бы с одним клиентом ,желательно с объяснением каждой новой функции.

Добавлено через 1 минуту
shmkv, я не тролю (ат значит та), я не жду от Вас длинного текста но и ответ что-то вроде
Цитата Сообщение от shmkv Посмотреть сообщение
собственно что это
Порты завершения ввода-вывода
это не очень нормальный ответ ,не так ли?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 23:16
Цитата Сообщение от ReYalp Посмотреть сообщение
вот собственно пример кода который приводили в пример ,я вижу тут тред пул в котором есть потоки ,их количество равно количеству ядер,но это разве не обычная многопоточность?
Обычная, я другой и не знаю...
Цитата Сообщение от ReYalp Посмотреть сообщение
всеравно же каждый поток сможет обрабатывать только одно событие ,не так ли?
Единовременно одно, да. А как иначе? В данном примере вообще нет никаких вызовов асинхронных функций, только создается пул потоков. Вот вместо задач в данном примере могут обрабатываться события о завершении операций ввода-вывода. Почитайте о событийно ориентированном программировании что ли. Как объяснить уже не знаю.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 23:17  [ТС]
shmkv, я же говорю, на конкретном примере можете показать? Я скинул код сервера, просто написать асинхронность для двух методов в нем и все, очень прошу
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 23:20
Цитата Сообщение от ReYalp Посмотреть сообщение
или будет просто замечательно если объяснить все на нужном примере ,как реализовать асинхронность вот на таком сервере где только один клиент
https://www.boost.org/doc/libs... server.cpp
Говонокод там редкостный, но суть показывает.
Цитата Сообщение от ReYalp Посмотреть сообщение
я бы мог создать два потока для send() и recv()
Я с трудом представляю зачем отдельные потоки для send и recv даже в блокирующей модели... Вроде всем хватает по потоку на соединение.
Цитата Сообщение от ReYalp Посмотреть сообщение
это не очень нормальный ответ ,не так ли?
А вы вообще читали хоть первые ссылки из гугла, прежде чем спрашивать?
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.03.2019, 23:27  [ТС]
shmkv, я то читал, просто там код не описывают, а тут я могу спросить если что-то не понятно

Добавлено через 5 минут
Цитата Сообщение от shmkv Посмотреть сообщение
Я с трудом представляю зачем отдельные потоки для send и recv даже в блокирующей модели... Вроде всем хватает по потоку на соединение.
Так ,сейчас абсолютно серезно,я понимаю что Вы знаете много на эту тему,я не знаю почти ничего,как мне посоветовали ранее то нужно сделать асинронный код хотя бы для одного клиента ,я не против ,уверен что это поможет мне научиться,если Вы не готовы мне помочь ,а готовы только косвенно отвечать на вопросы то пожалуйста не стоит этого делать ,я хочу научиться
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.03.2019, 23:57
К сожалению, у меня нет столько времени, чтобы взяться за обучение. Я дал ссылку на пример из boost, его можно собрать и разобраться как он устроен. Непонятное можно посмотреть в документации, а если уж и там не понятно, то можно и тут спросить.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
26.03.2019, 00:00  [ТС]
shmkv, извините конечно но я не думаю что написать асинхронность для сервера такого как я скинул заняло бы больше времени чем то что Вы мне наотвечали
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
26.03.2019, 00:02
Цитата Сообщение от ReYalp Посмотреть сообщение
shmkv, извините конечно но я не думаю что написать асинхронность для сервера такого как я скинул заняло бы больше времени чем то что Вы мне наотвечали
А чем вас не устраивает пример по ссылке? Мой пример будет примерно такой же, только вместо bind я бы заюзал лямбды и от delete this отказался. Но это скорее к C++ относится и с логикой работы с asio никак не связано.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
26.03.2019, 00:10  [ТС]
shmkv, хотя бы тем что в том примере нету ни одного описания кода,вообще,и человеку такому как я,который создал этот топик чтобы узнать что-то и спросить у знающих людей помощи ,очень трудно понять что происходит
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
26.03.2019, 00:29
Там в примере всего нск. строк кода, которые относятся к asio (прокомментировал, хотя все есть в документации):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <cstdlib>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
 
using boost::asio::ip::tcp;
 
class session
{
public:
  session(boost::asio::io_service& io_service)
    : socket_(io_service)
  {
  }
 
  tcp::socket& socket()
  {
    return socket_;
  }
 
  void start()
  {
    // отправляем запрос на чтение данных из сокета
    socket_.async_read_some(boost::asio::buffer(data_, max_length),
        boost::bind(&session::handle_read, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
  }
 
  // обработчик события, что данные прочитаны (или ошибки)
  void handle_read(const boost::system::error_code& error,
      size_t bytes_transferred)
  {
    if (!error)
    {
      // отправляем обратно в сокет принятые данные
      boost::asio::async_write(socket_,
          boost::asio::buffer(data_, bytes_transferred),
          boost::bind(&session::handle_write, this,
            boost::asio::placeholders::error));
    }
    else
    {
      delete this;
    }
  }
 
  // обработчик события, что данные записаны (или ошибки)
  void handle_write(const boost::system::error_code& error)
  {
    if (!error)
    {
      // читаем следующую порцию данных
      socket_.async_read_some(boost::asio::buffer(data_, max_length),
          boost::bind(&session::handle_read, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));
    }
    else
    {
      delete this;
    }
  }
 
private:
  tcp::socket socket_;
  enum { max_length = 1024 };
  char data_[max_length];
};
 
class server
{
public:
  server(boost::asio::io_service& io_service, short port)
    : io_service_(io_service),
      acceptor_(io_service, tcp::endpoint(tcp::v4(), port))
  {
    session* new_session = new session(io_service_);
    // устанавливаем обработчик для первого подключения
    acceptor_.async_accept(new_session->socket(),
        boost::bind(&server::handle_accept, this, new_session,
          boost::asio::placeholders::error));
  }
 
  //  колбэк для  подключений
  void handle_accept(session* new_session,
      const boost::system::error_code& error)
  {
    if (!error)
    {
      new_session->start();
      new_session = new session(io_service_);
      // устанавливаем обработчик для следуего подключения
      acceptor_.async_accept(new_session->socket(),
          boost::bind(&server::handle_accept, this, new_session,
            boost::asio::placeholders::error));
    }
    else
    {
      delete new_session;
    }
  }
 
private:
  boost::asio::io_service& io_service_;
  tcp::acceptor acceptor_;
};
 
int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: async_tcp_echo_server <port>\n";
      return 1;
    }
 
    // создаем io_service - объект, внутри которго обрабатываюстя события
    boost::asio::io_service io_service;
 
    using namespace std; // For atoi.
    server s(io_service, atoi(argv[1]));
 
    // запускаем цикл обработки событий
    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }
 
  return 0;
}
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
26.03.2019, 00:43  [ТС]
shmkv, насколько я понимаю это код сервера который обрабатывает >=1 подключения одновременно, а мне вот все таки для ясности работы асинхронности было бы лучше начать с сервера который принимает запросы только от одного клиента, возможно это бессмысленно но для начала это в самый раз, я хочу понять как это работает вот и все
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2019, 00:43

Асинхронность?
Уже как то создавал подобную тему, но моя текущая реализация меня не устраивает чуть более чем полностью, создам новую. Есть у меня некая...

Асинхронность
Всем привет) Я новичек в ноде, разрабатываю веб сервер. this.tokens.get(token, function(msg, that) { if (msg) { ...

Асинхронность в js
почему в консоле не находит переменную obj, но когда убираю setTimout, только тогда находит async function regUser() { ...

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Асинхронность и цикл
Здравствуйте! Не могу понять как правильно сделать перебор всех страниц сайта и у каждой странице сделать свою выборку?Чет я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru