Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 03.08.2017
Сообщений: 205

Имеет ли смысл создавать volatile переменную

16.09.2026, 11:08. Показов 14255. Ответов 171

Студворк — интернет-сервис помощи студентам
У меня есть функция
C++
1
2
void getParam(double &param){ //...
}
Вызов написал в таком виде:
C++
1
2
3
//...
{volatile double gain;
getParam((double&)gain);//...
Имеет ли смысл такая конструкция или лучше воспользоваться обычной переменной double?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2026, 11:08
Ответы с готовыми решениями:

1 класс имеет переменную указатель на 2, 2 имеет на 1
Имеется 2 класса. В 1 классе есть переменная-указатель на 2 класс, а во 2 классе есть...

Применение описателя Volatile
Приведите плз пример простой проги с этим описателем а то я не пойму для чего он вообще нужен?В чём...

Пример использования спецификатора volatile
В приложенной картинке (из книги Г.С. Шилдта по C++) есть пример использования спецификатора...

171
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,222
Записей в блоге: 2
01.10.2026, 20:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zayats80888 Посмотреть сообщение
А стандартный С++ позволяет вам писать априори корректный конкурентный код, а не эмпирически. Причем все те "приемчики", которыми вы жаждите поделиться, легко переписываются на стандартный с++ без какого-либо ущерба.
Увы, "жажду поделиться" я давно утратил, и это конечно плохо. Да и знаю не так уж много чтобы (щедро) делиться. Чтобы посмотреть как "легко переписываются" я иногда создаю темы. Вот напр здесь мои темы "забавы с атомик", и "близкие точки" - там про другое, но предметная часть Вам близка. Ну пока, из того что вижу, никак не переписываются, не говоря уже о "легко".

Данная тема тоже не лишена смысла. Когда надо делать - там уже поздно будет разговаривать, об общих вещах лучше поразмышлять отдельно. Напрасно проигнорировали первый вопрос "не гарантируется что один поток прочитает то что записал другой". Вообще-то все потоки работают в одном адресном пространстве процесса, поэтому "по идее" один поток должен (корректно) прочитать то что записал другой. То есть если бы никаких оптимизаций не было - все бы работало без всяких атомиков и синхронизаций. И чтобы получить ситуацию ошибки - нужно еще постараться. Тем не менее такие ситуации возникают, а отменить оптимизацию нельзя. Надо что-то делать, ну и понеслась - нужна точка/момент синхронизации, которой соответствует прочитанное значение, нужно ее как-то зарядить/инициировать и.т.д. Тут есть о чем поговорить. Может это всем и так ясно - ну хорошо, значит я попал в компанию интеллектуалов

Также незачем чуть что - кричать UB, UB ! (ату его!) Ну вот тот же "неатомарный флажок". Да, лично я никаких выгод не вижу, по-любому лучше сделать его атомиком. Но ведь не ошибка, ничего не рухнет, при работе со старым кодом не нужно бросаться править

Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну, наверное потому, что мьютекс предоставляет синхронизацию?
Ну здравый смысл говорит что иначе быть не может. Но хотелось бы видеть по меньшей мере знание матчасти, т.е. где это написано, какой поток с каким синхронизируется, как это достигается (пусть в общих чертах). Это небесполезно
Цитата Сообщение от zayats80888 Посмотреть сообщение
Можете загуглить, например, "arm memory ordering instructions".
Спасибо, идею понял: есть спец команды
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,372
01.10.2026, 22:46
Вот это учил, когда надо было.
Но я не плюсовик а гавно, и код соответственно тоже.

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
#include "windows.h"
#include <iostream>
#include "process.h" 
using namespace std;
HANDLE event;
 
void Test1(void *);
void Test2(void *);
void Test3(void *);
 
void main()
{
    event = CreateEventA(NULL, TRUE, FALSE, "FirstStep");
 
    if (_beginthread(Test1, 1024, NULL) == -1)
        cout << "Error begin thread " << endl;
    //if (_beginthread(Test2, 1024, NULL) == -1)
    //  cout << "Error begin thread " << endl;
    //if (_beginthread(Test3, 1024, NULL) == -1)
    //  cout << "Error begin thread " << endl;
    if (event != NULL) {
        Sleep(500);
        SetEvent(event);
    Sleep(500);
        ResetEvent(event);
        //CloseHandle(event);
    }
    else {
        cout << "error create event" << endl;
    }
    getchar();
}
 
void Test1(void *)
{
    while (true) {
        //DWORD dwWaitResult{};
        //while (dwWaitResult != WAIT_OBJECT_0) {
            //dwWaitResult =
        WaitForSingleObject(event, INFINITE);
        //cout << "Test 1 TIMEOUT" << endl;
    //}
        cout << "Event Test 1 " << endl;
 
    }
    ///_endthread();
}
 
void Test2(void *)
{
    DWORD dwWaitResult{};
    while (dwWaitResult != WAIT_OBJECT_0) {//  WAIT_OBJECT_0    0x000000000L —осто¤ние указанного объекта сигнализирует.
        dwWaitResult = WaitForSingleObject(event, 1);
        cout << "Test 2 TIMEOUT" << endl;
    }
    cout << "Event Test 2 " << endl;
    _endthread();
}
 
void Test3(void *)
{
    DWORD dwWaitResult{};
    while (dwWaitResult != WAIT_OBJECT_0) {
        dwWaitResult = WaitForSingleObject(event, 1);
        cout << "Test 3 TIMEOUT" << endl;
    }
    cout << "Event Test 3 " << endl;
    _endthread();
}
Добавлено через 51 секунду
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
//----------------
HANDLE e;
 
unsigned int __stdcall potoc(void* p) {
    char *pint = (char*)p;
    std::cout << pint << std::endl;
    Sleep(1000);
    SetEvent(e);// Устанавливает указанный объект события в сигнальное состояние.(Разрешает проход через пробку)
    //  -------- ResetEvent(e);  // Запрещает проход через пробку.
    //  --------  CloseHandle(e); //Хендл надо бы закрыть
    return 0;
}
 
//----------------  http://www.firststeps.ru/mfc/winapi/r.php?119
//------------- https://eax.me/winapi-threads/
// --------------------- https://**********************/questions/674933/
// ---------------- https://rsdn.org/article/cpp/cxx_events.xml
 
 
 
int main()
{
    const char * mas = "12345";
 
    e = CreateEventA(NULL, FALSE, FALSE, NULL);
 
    _beginthreadex(NULL, 0, &potoc, (void*)mas, 0, NULL);// Создает поток
 
    WaitForSingleObject(e, INFINITE);// Эта ху пробка. Она ждёт разрешения из потока -- SetEvent(e);
    //                INFINITE - ждёт вечно
    /*
Если WaitForSingleObject(e, INFINITE); использовать несколько раз в цикле потока,
                      то он после одного прохождения, лочит (SetEvent(e);)   снова
            ( Если второй параметр CreateEventA TRUE, функция создает объект события ручного сброса,
        который требует использования функции сброса ResetEvent) --- не лочит ---
    
Ожидание, пока указанный объект не окажется в сигнальном состоянии
или пока не истечет интервал времени ожидания (INFINITE - бесконечно).
Если указано ненулевое значение, функция ожидает,
пока объект не будет сигнализирован или интервал не истечет.
    */
    system("pause");
    return 0;
}
Добавлено через 52 секунды
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
//----------------
HANDLE ev;
 
typedef struct {
    char word[21] = "Hello World!        ";
    int letter = 12345;
    short last_member{};
} z_data;
 
 
 
 
unsigned __stdcall MyThread(void *data)
{
    z_data *iptr = (z_data*)data;
    
printf("%s -- %d   %d\n", iptr->word, iptr->letter, iptr->last_member);
    
    Sleep(1000);
    SetEvent(ev);
    _endthread();
    return 0;
}
 
 
 
 
 
 
int main()
{
// z_data ems;// Переменная созданная таким образом имеет информацию и размер.
// ems.last_member = 5683;// Можно инициализировать здесь
 
    z_data ems{ "Hello fucked World! ", 7654, 543};// Переинициализировал. Надо соблюдать размер...
 
void *mem_ptr = malloc(sizeof(z_data));//  Это просто место на куче
    memcpy(mem_ptr, &ems, sizeof(ems));// Использую это место под структуру
//---------------------------------------------------
    ev = CreateEventA(NULL,// Указатель на структуру SECURITY_ATTRIBUTES.
        
        FALSE, /*Если этот параметр TRUE, функция создает объект события ручного сброса,
        который требует использования функции сброса ResetEvent,
        чтобы задать состояние события незначальным.
        Если этот параметр FALSE, функция создает объект события автоматического сброса,
        а система автоматически сбрасывает состояние события на незначаемое после выпуска одного потока ожидания.*/
        FALSE,/* Если этот параметр TRUE, сигнализируется начальное состояние объекта события;
    в противном случае оно не назначено.*/
        
        "lpName");// Имя объекта события 
//---------------------------------------------------
 
    for (int i = 0; i < 5; ++i) 
            {
        _beginthreadex(NULL, 0, MyThread, mem_ptr, 0, NULL);
 
        WaitForSingleObject(ev, INFINITE);
         //ResetEvent(ev);// Если первое CreateEventA(NULL,   FALSE то это делается автоматически (сброс)
            }
free(mem_ptr);
        return 0;
}
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,222
Записей в блоге: 2
02.10.2026, 17:30
Следующий простой вопрос
А можно пример ( ) этой самой "синхронизации", показывающий для чего она используется/уместна?
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
02.10.2026, 19:32
Igor3D, может, что-то такое: потоки пишут A и B строго по очереди в несинхронизированную строку

кстати, я первый раз с атомиками вот именно так "поступаю" (в смысле - с явным указанием acquire/release), пусть меня подправят, если что

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
#include <iostream>
#include <thread>
#include <string>
#include <atomic>
 
int main()
{
    constexpr int steps=1000;
    constexpr int break_len=50;
    
    std::string s; //несинхронизированная переменная
    
    std::atomic<bool> flag{};
 
    std::thread t1([&flag,&s]
    {
        auto& fl = flag;
        for(int i=0; i<steps; )
        {
            if(!fl.load(std::memory_order_acquire))
            {
                ++i;
                s+='A';
                fl.store(true,std::memory_order_release);
            }
        }
    });
    
    std::thread t2([&flag,&s]
    {
        auto& fl = flag;
        for(int i=0; i<steps; )
        {
            if(fl.load(std::memory_order_acquire))
            {
                ++i;
                s+='B';
                fl.store(false,std::memory_order_release);
            }
        }
    });
    
    t2.join();
    t1.join();
    
    for(std::string_view v=s, sub; !(sub=v.substr(0,break_len)).empty(); v.remove_prefix(sub.size()))
    {
        std::cout<<sub<<'\n';
    }
}

ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABABABABABABABAB
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
02.10.2026, 22:53
Алексей1153, тоже самое без атомика и покороче

С++23

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
#include <iostream>
#include <ranges>
#include <semaphore>
#include <string>
#include <string_view>
#include <thread>
 
int main()
{
    constexpr int steps = 1000;
    constexpr int break_len = 50;
 
    std::string s;
    std::binary_semaphore turn_a{1}, turn_b{0};
 
    auto worker = [&](std::binary_semaphore& in, std::binary_semaphore& out, char ch)
    {
        for (int i = 0; i < steps; ++i)
        {
            in.acquire();
            s += ch;
            out.release();
        }
    };
 
    {
        std::jthread t1{worker, std::ref(turn_a), std::ref(turn_b), 'A'};
        std::jthread t2{worker, std::ref(turn_b), std::ref(turn_a), 'B'};
    }
 
    for (auto chunk : s | std::views::chunk(break_len))
        std::cout << std::string_view(chunk) << '\n';
}
1
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,372
03.10.2026, 03:04
Вспомнил. Тянул мышою резиновую рамку (другим потоком)
и надо было снимать с неё показания.
Измерить размер видео...
Измеряет...

Два цикла вертит. Один в потоке рамки, и ещё один в основной программе.
Я не буду здесь мусор выкладывать. Не особо это кому надо.
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,222
Записей в блоге: 2
07.10.2026, 01:55
Цитата Сообщение от Алексей1153 Посмотреть сообщение
потоки пишут A и B строго по очереди в несинхронизированную строку
Пример нормальный/корректный, но не очень показательный/убедительный. Атомик гарантирует что все дела с оператором += будут закончены ДО его (атомика) записи. В данном случае выглядит нереально чтобы компилятор/процессор как-то оставили оператор += незавершенным до записи флага, а другой поток сорвался с цепи, полез в тот же оператор, и все рухнуло. Поэтому будет работать и без всяких атомиков. Тем не менее проще его использовать и не затруднять себя никакими раздумьями.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
я первый раз с атомиками вот именно так "поступаю" (в смысле - с явным указанием acquire/release)
Ну разок-другой можно и написать (полюбоваться своей грамотностью ), но не более того
Цитата Сообщение от Royal_X Посмотреть сообщение
тоже самое без атомика и покороче
Совсем не то же Когда поток ждет на семафоре, он остановлен и ресурсов не потребляет. Пробуждение потока требует некоторого времени. А в примере Алексей1153, поток крутится в пустом цикле "прожигая процессор", хотя для достаточно быстрой операции += это разумно. Что касается атомиков и синхронизации, то, вроде бы, при использовании стандартных примитивов (мутекс, семафор и др) это не требуется, можно неатомики, все синхронизируется автоматычно. Хотя я об этом нигде не читал, так, предполагаю
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
07.10.2026, 08:18
Цитата Сообщение от Igor3D Посмотреть сообщение
полюбоваться своей грамотностью
ну, тут типа ситуация "выжать всё возможное", ведь в это время можно в потоке ещё что-то делать.

А так да, такие вещи очень хрупкие.

В реальном боевом проекте я использую мьютексы при заполнении и чтении контейнеров, там шустрости хватает пока что.

Когда не будет хватать, нужно будет окунуться поглубже в тему атомиков
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
07.10.2026, 08:55
Цитата Сообщение от Igor3D Посмотреть сообщение
В данном случае выглядит нереально чтобы компилятор/процессор как-то оставили оператор += незавершенным до записи флага, а другой поток сорвался с цепи, полез в тот же оператор, и все рухнуло.
Потому что на платформе есть готовая компактная инструкция для этой операции. А возьмите *= или что посложнее - и уже запросто возможны варианты.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdlib.h>
 
unsigned x, a, b;
volatile unsigned flag;
 
int main(void)
{
  a = rand();
  b = rand();
  x = a * b;
  flag = 1;
  return x;
}
Сгенерированный GCC код

Assembler
1
2
3
4
5
6
7
8
9
10
11
"main":
        sub     rsp, 8
        call    "rand"
        mov     DWORD PTR "a"[rip], eax
        call    "rand"
        mov     DWORD PTR "flag"[rip], 1
        mov     DWORD PTR "b"[rip], eax
        imul    eax, DWORD PTR "a"[rip]
        mov     DWORD PTR "x"[rip], eax
        add     rsp, 8
        ret
Как видите, запись в x уехала вниз и выполняется после установки флага. Даже операция умножения уехала и выполняется после установки флага. То есть вниз уехало немало инструкций. Другой поток запросто может увидеть уже установленный флаг, но еще не готовое x.

Цитата Сообщение от Igor3D Посмотреть сообщение
А в примере Алексей1153, поток крутится в пустом цикле "прожигая процессор",
Современные процессоры, кстати, умеют распознавать такие ситуации и не "прожигать" себя.

Цитата Сообщение от Igor3D Посмотреть сообщение
вроде бы, при использовании стандартных примитивов (мутекс, семафор и др) это не требуется, можно неатомики, все синхронизируется автоматычно.
Операции над такими примитивами - это барьеры в памяти (там все немного тоньше, но общая суть такова). Поэтому под их защитой все будет работать и без атомиков.
1
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
07.10.2026, 12:33
Igor3D, много чего еще зависит от реализации. Я вот решил немного поисследовать и понял, что мой код будет лучше работать на винде, если скомпилировать его с помощью MSVC. Там передача хода будет быстрее.
Покопался в хидерах моего mingw-w64-ucrt-x86_64-gcc 16.2 на винде: bits/semaphore_base.h и bits/atomic_wait.h и осознал, что в реализации нативное ожидание есть только для Linux (futex), macOS и FreeBSD. Я даже скомпилировал и потом посмотрел imports, там не нашел функций нативного ожидания для винды: WaitOnAddress, WakeByAddressSingle и WakeByAddressAll. Вместо этого были CreateSemaphoreA, ReleaseSemaphore, CreateEventA/W, SetEvent, ResetEvent, WaitForSingleObject, WaitForMultipleObjects и пр.
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,222
Записей в блоге: 2
07.10.2026, 15:56
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Современные процессоры, кстати, умеют распознавать такие ситуации и не "прожигать" себя.
Источник этой информации?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Операции над такими примитивами - это барьеры в памяти (там все немного тоньше, но общая суть такова). Поэтому под их защитой все будет работать и без атомиков.
А можно подробнее? Спасибо
0
08.10.2026, 14:39

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как видите, запись в x уехала вниз и выполняется после установки флага.
Я конечно знал (слышал) что компилятор "может переставить". Но не имел понятия насколько махрово, злостно. Полезная демонстрация, спасибо

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2026, 14:39

const volatile
Пример из Шилдт Г. &quot;С++ Базовый курс (3-е издание, 2010)&quot; стр 205 const volatile unsigned char...

исследование volatile
Здравствуйте. В университете дали задание: &quot;Исследование квалификаторов volatile и инструкции...

int\ volatile int \ const int
Товарищи, паника! Имеется код: int a = 5; std::cout &lt;&lt; &quot;Init value a: &quot; &lt;&lt; a &lt;&lt; &quot;\n&quot;; ...

const_cast: const и volatile
Как известно const_cast сбрасывает наложенные ограничения при помощи модификаторов const и...

Что такое "volatile int"
есть объявление и инициализация переменной: volatile int Sklad = 0; что такое &quot;volatile&quot;? с msdn...


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

Или воспользуйтесь поиском по форуму:
172
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru