Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84

Потоки и работа с ними

15.02.2020, 19:21. Показов 786. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть вопрос, который не дает мне покоя уже очень много времени, никак не могу решить проблему.

В общем суть такая: Есть 3 потока. все обращаются к одной функции, в этой функции создаются файлы и их имена. которые должны быть индивидуальные для каждого потока, но у меня потоки создают и работают с одними и теми же файлами. Я использовал mutex, lock_guard, unique_lock, но все бестолку, все равно получается одно и тоже. Все потоки имеют доступ к секции с созданием имен одновременно, в результате все 3 потока создают один и тот же файл и все с ним работают, и потом вообще зависают и вся программа зависает и ничего не работает....

Помогите, что делать? как быть?

P.S. если программу запустить в одном потоке, то она работает идеально, но долго, поэтому необходимо запускать ее в разных потоках....

Добавлено через 7 минут
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
unique_lock<mutex> guard(mtx);
        std::wstring DeletebmpFile(L"D:\\TempBMP\\Frame");
        std::wstring DeleteBmp(L".bmp");
 
        std::wstring CreatejpegFile(L"D:\\TempJPEG\\Frame");
        std::wstring Createjpeg(L".jpeg");
 
        std::wstring LoadZoombmpFile(L"D:\\TempBMPZOOM\\Frame");
        std::wstring LoadZoombmp(L".bmp");
 
        std::wstring CreateBMPZOOM = L"D:\\TempBMPZOOM\\Frame";
        std::wstring CreateZoombmp(L".bmp");
 
        std::wstring LoadBmpFile = L"D:\\TempBMP\\Frame";
        std::wstring LoadBmp(L".bmp");
 
        LoadZoombmpFile += to_wstring(AviFrames[_frame]) += LoadZoombmp;
        LoadZOOMBmp = LoadZoombmpFile.c_str();
 
        CreateBMP = (LoadBmpFile += to_wstring(AviFrames[_frame]) += LoadBmp).c_str();
 
        CreatejpegFile += to_wstring(AviFrames[_frame]) += Createjpeg;
        CreateJPEGFile = CreatejpegFile.c_str();
        _frame++;
        USES_CONVERSION;
        const char* TempBMP = W2A(CreateBMP);
        const char* TempBMPZOOM = W2A(LoadZOOMBmp);
        guard.unlock();
Это тот самый блок кода в котором создаются имена для каждого файла, он является критической секцией и поэтому тут mutex'ы. но все равно все потоки одновременно заходят сюда и создают один и тот файл...
LoadZOOMBmp, CreateBMP, CreateJPEGFile являются глобальными переменными, которые передаются в поток через ссылку. при том для каждого потока передается своя переменная, например в первый поток CreateBMP. а во второй CreateBMP1, а в третий CreateBMP2, и так далее, но все равно получается каша...

Добавлено через 1 минуту
Я в общем в тупике, я не знаю что делать, в каком направлении копать, подскажите пожалуйста...

Добавлено через 28 секунд
Промучился с этой секцией уже 4 дня и все равно одно и тоже....

Добавлено через 53 секунды
Еще раз повторюсь, что если запустить в один поток, то программа работает идеально, но очень долго....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2020, 19:21
Ответы с готовыми решениями:

Потоки и взаимодействие между ними
Всем привет! С потоками вот только начал разбираться, поэтому вопрос нубский. Каким образом можно реализовать взаимодействие...

Стандартные потоки и связанные с ними исключения
Хочу задать выброс исключений если что-то с потоком не так, мне это и удалось, но я не могу очистить поток после этого. Код: #include...

Потоки и передача параметров между ними
Привет всем! Может кто подскажет, как справиться с этой загвоздкой? 1. Запускаем в новом потоке SQL запрос для получения списка данных...

18
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 19:24
Цитата Сообщение от txtbit Посмотреть сообщение
Я в общем в тупике, я не знаю что делать, в каком направлении копать, подскажите пожалуйста...
Покажи весь код

Добавлено через 2 минуты
Цитата Сообщение от txtbit Посмотреть сообщение
Все потоки имеют доступ к секции с созданием имен одновременно, в результате все 3 потока создают один и тот же файл и все с ним работают
А должны создавать разные? Где это определяется?
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 19:32  [ТС]
Если описать все что мне нужно словами, то мне необходимо, что б Поток1 работал с Frame0, Поток2 работал с Frame1, Поток3 работал с Frame2 и все это одновременно, и после того как закончат Поток1 работал с Frame3, Поток2 работал с Frame4, Поток3 работал с Frame5 снова одновременно и так далее пока не закончиться весь цикл...

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи весь код
Весь код просто огромный, тот фрагмент который я выложил он самый ключевой, остальное все нормально работает... Я не знаю просто что выложить, что именно вас интересует?

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А должны создавать разные? Где это определяется?
Это определяется тем, что я блокирую mutex'ом критическую секцию, и как бы говорю что поток создал свой файл, освободил критическую секцию и теперь следующий поток теперь может создать свой и так далее, но это так не работает
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 19:37
Цитата Сообщение от txtbit Посмотреть сообщение
Если описать все что мне нужно словами, то мне необходимо, что б Поток1 работал с Frame0, Поток2 работал с Frame1, Поток3 работал с Frame2 и все это одновременно, и после того как закончат Поток1 работал с Frame3, Поток2 работал с Frame4, Поток3 работал с Frame5 снова одновременно и так далее пока не закончиться весь цикл...
Где в твоём коде в имена файлов добавляются цифра 1-2-3...., чтоб получилось Frame1-Frame2?

Добавлено через 17 секунд
Цитата Сообщение от txtbit Посмотреть сообщение
Весь код просто огромный, тот фрагмент который я выложил он самый ключевой, остальное все нормально работает... Я не знаю просто что выложить, что именно вас интересует?
Покажи функцию потока

Добавлено через 1 минуту
А, ну да, вижу - наверное здесь LoadZoombmpFile += to_wstring(AviFrames[_frame]) += LoadZoombmp;
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 19:37  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Где в твоём коде в имена файлов добавляются цифра 1-2-3...., чтоб получилось Frame1-Frame2?
C++
1
2
CreatejpegFile += to_wstring(AviFrames[_frame]) += Createjpeg;
        CreateJPEGFile = CreatejpegFile.c_str();
Вот это тот самый момент когда я создаю файлы с цифрами, все цифры находятся в массиве AviFrames. Там столько цифр, сколько Frames....
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 19:40
Цитата Сообщение от txtbit Посмотреть сообщение
Вот это тот самый момент когда я создаю файлы с цифрами, все цифры находятся в массиве AviFrames. Там столько цифр, сколько Frames....
А ты проверял, имена-то разные получаются для разных потоков?

Добавлено через 48 секунд
Ну так покажи функцию потока и как ты эти потоки запускаешь.
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 19:43  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи функцию потока
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
void FrameWork(DWORD DynamicZOOMBitMap[][yZOOM], const int xZOOM, const int yZOOM, DWORD DynamicLoadedBitMap[][height], const int width, const int height, int t, int x, int y, BYTE* ColorsOfLoadBitMap, BYTE* aBitmapBits, LONG* AviFrames, const WCHAR* CreateBMP, const WCHAR* LoadZOOMBmp, const WCHAR* CreateJPEGFile)
{
    BOOL IsLoaded;
    do
    {
        auto start = chrono::high_resolution_clock::now();
 
        unique_lock<mutex> guard(mtx);
        std::wstring DeletebmpFile(L"D:\\TempBMP\\Frame");
        std::wstring DeleteBmp(L".bmp");
 
        std::wstring CreatejpegFile(L"D:\\TempJPEG\\Frame");
        std::wstring Createjpeg(L".jpeg");
 
        std::wstring LoadZoombmpFile(L"D:\\TempBMPZOOM\\Frame");
        std::wstring LoadZoombmp(L".bmp");
 
        std::wstring CreateBMPZOOM = L"D:\\TempBMPZOOM\\Frame";
        std::wstring CreateZoombmp(L".bmp");
 
        std::wstring LoadBmpFile = L"D:\\TempBMP\\Frame";
        std::wstring LoadBmp(L".bmp");
 
        LoadZoombmpFile += to_wstring(AviFrames[_frame]) += LoadZoombmp;
        LoadZOOMBmp = LoadZoombmpFile.c_str();
 
        CreateBMP = (LoadBmpFile += to_wstring(AviFrames[_frame]) += LoadBmp).c_str();
 
        CreatejpegFile += to_wstring(AviFrames[_frame]) += Createjpeg;
        CreateJPEGFile = CreatejpegFile.c_str();
        _frame++;
        USES_CONVERSION;
        const char* TempBMP = W2A(CreateBMP);
        const char* TempBMPZOOM = W2A(LoadZOOMBmp);
        guard.unlock();
        /*bytes = ((width * 24 + 31) / 32) * 4;
        LoadedImageSize = bytes * height;*/
 
        
        IsLoaded = LoadFromFile(width, height, TempBMP, ColorsOfLoadBitMap);
        DeleteFile(CreateBMP);  
        
        CreateDib24(xZOOM, yZOOM, TempBMPZOOM, aBitmapBits);
 
        StoreDib24(aBitmapBits);
        delete[] ColorsOfLoadBitMap;
 
        _EffectsToFrame(t, LoadZOOMBmp, CreateJPEGFile);
 
        auto stop = chrono::high_resolution_clock::now();
        chrono::duration<float> duration = stop - start;
        long Timeleft = (iNumFrames - _frame) * duration.count();
        LPCWSTR Timer;
        std::wstring timing = L"Time Left: ";
        timing += to_wstring(Timeleft) += L" seconds";
        Timer = timing.c_str();
 
        DrawText(ThDC, Timer, 25, &ps.rcPaint, DT_CENTER | DT_VCENTER);
 
    } while (_frame != iNumFrames);
 
}
Добавлено через 1 минуту
Больше чем в этой функции вы нигде не видели столько параметров))))

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А ты проверял, имена-то разные получаются для разных потоков?
В том то и дело что нет, потому что потоки не блокируются mutex'ом и заходят в эту функцию одновременно и создают например Frame0 одновременно и работают с ним одновременно...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 19:44
Цитата Сообщение от txtbit Посмотреть сообщение
Больше чем в этой функции вы нигде не видели столько параметров))))
Мьютекс mtx и счётчик _frame статические, точно общие для всех потоков?
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 19:44  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
и как ты эти потоки запускаешь.
C++
1
2
3
4
5
6
7
8
9
10
11
thread FW1 = thread(FrameWork, DynamicZOOMBitMap1, xZOOM, yZOOM, DynamicLoadedBitMap1, width, height, 5, xForThread1, yForThread1, ColorsOfLoadBitMap1, aBitmapBits1, AviFrames, std::ref(LoadBMPFile1), std::ref(LoadZOOMBMPFile1), std::ref(CreateJPEGFile1));
 
 
            thread FW2 = thread(FrameWork, DynamicZOOMBitMap2, xZOOM, yZOOM, DynamicLoadedBitMap2, width, height, 30, xForThread2, yForThread2, ColorsOfLoadBitMap2, aBitmapBits2, AviFrames, std::ref(LoadBMPFile2), std::ref(LoadZOOMBMPFile2), std::ref(CreateJPEGFile2));
 
 
            FrameWork(DynamicZOOMBitMap, xZOOM, yZOOM, DynamicLoadedBitMap, width, height, 50, x, y, ColorsOfLoadBitMap, aBitmapBits, AviFrames, std::ref(LoadBMPFile), std::ref(LoadZOOMBMPFile), std::ref(CreateJPEGFile));
 
            AVIExtr.join();
            FW1.join();
            FW2.join();
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 19:45  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Мьютекс mtx и счётчик _frame статические, точно общие для всех потоков?
они глобальные, но не объявлены как static...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 20:00
Цитата Сообщение от txtbit Посмотреть сообщение
} while (_frame != iNumFrames);
Это должно быть под мьютексом

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
BOOL IsLoaded;
for (;;)
{
    int Frame;
    {
        unique_lock<mutex> guard(mtx);
        Frame = frame_++;
        if (Frame >= iNumFrames)
            break;
    }
 
    ....................
 
 
        LoadZoombmpFile += to_wstring(AviFrames[Frame]) += LoadZoombmp;
    LoadZOOMBmp = LoadZoombmpFile.c_str();
 
    CreateBMP = (LoadBmpFile += to_wstring(AviFrames[Frame]) += LoadBmp).c_str();
 
................
}
Добавлено через 3 минуты
А ещё лучше объяви frame_ как std::atomic<size_t>, тогда и мьютекс не понадобится
C++
1
2
3
4
5
6
7
8
9
10
11
static std::atomic<size_t> frame_{0};
void FrameWork(DWORD 
{
    BOOL IsLoaded;
    for (;;)
    {
        int Frame = frame_++;
        if (Frame >= iNumFrames)
            break;
 
        ....................
Добавлено через 5 минут
Кстати а AviFrames[_frame] точно разные для разных frame?
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 20:06  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Кстати а AviFrames[_frame] точно разные для разных frame?
Каждый раз когда поток выходит из mutex, то он увеличивает _frame++, тем самым гарантируя, что следующий поток создаст Frame с числом на единицу больше, но учитывая, что потоки все одновременно заходят в функцию, то этого не происходит.

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А ещё лучше объяви frame_ как std::atomic<size_t>, тогда и мьютекс не понадобится
Я пробовал, но это что то не работало, наверно я я не так объявлял... надо было в глобальной области объявить, или в функции?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 20:07
Цитата Сообщение от txtbit Посмотреть сообщение
Каждый раз когда поток выходит из mutex, то он увеличивает _frame++,
Так ты не _frame добавляешь к имени файла, а содержимое массива AviFrames[_frame]. В нём что?

Добавлено через 1 минуту
Цитата Сообщение от txtbit Посмотреть сообщение
надо было в глобальной области объявить, или в функции?
Если static, то всё равно, иначе в глобальной. А сейчас где у тебя _frame объявлена?
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 20:12  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Так ты не _frame добавляешь к имени файла, а содержимое массива AviFrames[_frame]. В нём что?
В нем просто числа, при том если _frame == 100, то и в массиве значит тоже самое 100.

Добавлено через 45 секунд
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Если static, то всё равно, иначе в глобальной. А сейчас где у тебя _frame объявлена?
Все переменные в проекте объявлены в глобальной области видимости...

Добавлено через 2 минуты
Вся проблема в том, что все потоки заходят в критическую зону одновременно, и не блокируются mutex'ом, вот здесь и начинается проблема..
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 20:14
Цитата Сообщение от txtbit Посмотреть сообщение
Вся проблема в том, что все потоки заходят в критическую зону одновременно, и не блокируются mutex'ом, вот здесь и начинается проблема..
Они не могут заходить под мьютекс одновременно.
Ты вот это сделал
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Это должно быть под мьютексом
?
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 20:17  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты вот это сделал
Нет,я просто не понял до конца, что именно я должен заключить в mutex, там же просто условие цикла while, пока оно работает работает вся функция, если я всю функцию закрою mutex'ом, то мне смысла не будет в потоках....
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.02.2020, 20:21
Цитата Сообщение от txtbit Посмотреть сообщение
Нет,я просто не понял до конца, что именно я должен заключить в mutex, там же просто условие цикла while, пока оно работает работает вся функция, если я всю функцию закрою mutex'ом, то мне смысла не будет в потоках....
Я ж там вроде ясно показал какой цикл должен быть и что закрыть под мьютекс. И что нужно использовать Frame вместо _frame
0
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
15.02.2020, 21:02  [ТС]
Понял, поменять цикл while на цикл for, и использовать доп переменную..

Только я уже пробовал использовать доп переменную, не работает это тоже. Использовать {}, и в эту область заключить переменные я пробовал, это не работает, почему то значения не выходят за пределы этой области и там же и остаются...

Добавлено через 5 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BOOL IsLoaded;
for (;;)
{
    int Frame;
    {
        unique_lock<mutex> guard(mtx);
        Frame = frame_++;
        if (Frame >= iNumFrames)
            break;
    }
....................
LoadZoombmpFile += to_wstring(AviFrames[Frame]) += LoadZoombmp;
    LoadZOOMBmp = LoadZoombmpFile.c_str();
CreateBMP = (LoadBmpFile += to_wstring(AviFrames[Frame]) += LoadBmp).c_str();
................
}
Тем более, что область где создаются имена все равно открыта для остальных потоков и все будет тоже самое...

C++
1
2
3
4
5
6
7
int Frame;
    {
        unique_lock<mutex> guard(mtx);
        Frame = frame_++;
        if (Frame >= iNumFrames)
            break;
    }
Мютекс в этой области не даст результатов, Frame все равно будет менять названия файлов на то, которое будет у нее сейчас, например Поток1 зашел и сделал Frame == 0? следом Поток2 зашел и сделал Frame == 1, но так как секция с кодом
C++
1
2
3
LoadZoombmpFile += to_wstring(AviFrames[Frame]) += LoadZoombmp;
    LoadZOOMBmp = LoadZoombmpFile.c_str();
CreateBMP = (LoadBmpFile += to_wstring(AviFrames[Frame]) += LoadBmp).c_str();
не защищена, то тут и будет происходить подмена значения Frame на новое...

Добавлено через 2 минуты
Если блокировать всю функцию через мютекс, то смысл в поточности теряется...

Добавлено через 1 минуту
Может я что то не понимаю... надеюсь что вы сможете донести до меня свою мысль... потому что мне очень нужна помощь... Все работает идеально, а потоки не хотят, обидно...

Добавлено через 12 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Они не могут заходить под мьютекс одновременно.
Но однако это происходит, иначе почему создаются одинаковые файлы?

Добавлено через 5 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
static std::atomic<size_t> frame_{0};
А есть разница объявить в глобале или через static в функции?

Добавлено через 3 минуты
Если я обидел своими спорами, то извиняюсь, я не экзаменатор и не экзаменую и не спорю, я просто задаю вопросы, что б понять... Мне реально надо решение...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.02.2020, 12:02
Цитата Сообщение от txtbit Посмотреть сообщение
Но однако это происходит, иначе почему создаются одинаковые файлы?
Нет, не происходит. Одинаковые файлы создаются по другой причине.
Цитата Сообщение от txtbit Посмотреть сообщение
Если я обидел своими спорами, то извиняюсь, я не экзаменатор и не экзаменую и не спорю, я просто задаю вопросы, что б понять... Мне реально надо решение...
Какими спорами? Ты просто тупишь и всё, это не спор. Покажи-ка весь код. А ещё лучше вырежи всё лишнее, оставь только работу с этими файлами и тогда покажи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2020, 12:02
Помогаю со студенческими работами здесь

потоки и всё что с ними связано (thread). Не компилица(
собственно сабж в качестве примера код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;pthread.h&gt; #include...

Потоки, глобальные переменные и обмен данными между ними
Имеется два потока (А и Б) которые каждую минуту генерируют число. Также имеются две переменные (int iA, iB) и в эти переменные...

2 ui и работа между ними
есть проект в нем 2 *.ui фаила. в первом кнопка, во втором label. Нажимаю на кнопку и в label появляется какое то значение. То есть...

Массивы и работа с ними
помогите, пожалуйста, написать программу Дана вещественная прямоугольная матрица размера M*N. • Упорядочить столбцы матрицы по...

Функции и работа с ними
Всем доброго дня у меня такая проблема вот - unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru