Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114

Многопоточность, _beginthreadex, ошибка ntdll.dll

28.10.2016, 00:26. Показов 6931. Ответов 70
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, собственно сабж.

Посмотрите пожалуйста комментарии в коде. Как исправить ситуацию, не правильно запускаются потоки?

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
 unsigned __stdcall potok(void* Param)
 {
//Собственно тут код может быть любой на частоту появления ошибки вообще никак не влияет,
// я Комментировал вообще все подряд, все равно лезет ошибка
 
     static int *p = (int*)Param;
 
     char buffer[100];
     wsprintf(buffer, "%u", *p);
     MessageBox(0, buffer, "", 0); 
 
     delete[] buffer;
 
     _endthreadex(0);
     return 0;
 }
 
int main()
{
    for (int i = 0; i < 50; i++)
    {
//      Sleep(900); // Если ставить паузу между запусками потоков, то проблема появляется значительно реже,
              // но появляется так, или иначе в любом случае, без паузы у меня в9 из 10 ловится ошибка.
 
        try
        {
            _beginthreadex(NULL, 0, &potok, (void*)&i, 0, NULL);  
        }
    
        catch (char *str)
        {
            printf("Error '%s'!\n", str);
        }
    }
 
    _endthreadex(0);
return 0;
}
При выполнение этого кода, вылетает ошибка
Вызвано исключение по адресу 0x77456D39 (ntdll.dll) в CSmtp.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000014.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2016, 00:26
Ответы с готовыми решениями:

Вызвано исключение по адресу 0x772C09D6 (ntdll.dll)
Здравствуйте. Имеется проблема: при добавлении данного перечня заголовков в VS (всех вместе или каждого по отдельности) компиляция...

Исключение по адресу 0x77785BE7 (ntdll.dll) в lagranz_interpolution.exe: 0xC0000005
Вызвано исключение по адресу 0x77785BE7 (ntdll.dll) в lagranz_interpolution.exe: 0xC0000005: нарушение прав доступа при чтении по адресу...

При запуске своей проги на Windows 7, ругается на ntdll.dll
Прогу пишу в BDS2006, а проблема по всей видимости из-за того, что запускать её пришлось в ОС x64... Подскажите (желательно срочно -...

70
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
29.10.2016, 00:09  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nd2 Посмотреть сообщение
Я думаю админы не поймут копирования постов, теме 2 дня, если админы посчитали что ей тут место, значит так и есть.
На нативном с++ не существует потоков?
А я посчитал что вы как раз на них указали постом выше, только к несчастью без примеров.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.10.2016, 00:21
Цитата Сообщение от lostandleft Посмотреть сообщение
На нативном с++ не существует потоков?
Таких, как у тебя в коде. Таких функций, для работы с потоками, как у тебя в коде, и т.д.

Добавлено через 45 секунд
Цитата Сообщение от lostandleft Посмотреть сообщение
только к несчастью без примеров.
Примеры там дальше. Это конструктор, с примером:
http://ru.cppreference.com/w/c... ead/thread
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.10.2016, 00:22
Цитата Сообщение от lostandleft Посмотреть сообщение
На нативном с++ не существует потоков?
http://www.cplusplus.com/reference/thread/thread/
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
29.10.2016, 09:37
Лучший ответ Сообщение было отмечено lostandleft как решение

Решение

lostandleft, несколько замечаний.

1. Запускай приложение в режиме отладки из Visual Studio.
Если вылетает исключение, нажимай 'Break' и попадешь прямо в то место,
где возникла проблема. Либо можно запускать программу отдельно от
Visual Studio и цепляться к ней отладчиком. Например, WinDBG.

2. WaitForMultipleObjects не может ожидать более, чем 64 объекта.
Это известное ограничение данной функции, которое описано в MSDN.
Возможно, из-за этого и вылетает ошибка.

3. CloseHandle надо вызывать всегда. Эта функция не завершает
поток, она просто закрывает его дескриптор (хэндл).
Незакрытый хэндл = утечка ресурсов.

4. _endthreadex из фукнции потока звать не нужно, т.к. при этом
не вызываются деструкторы локальных объектов.

5. При создании потока нужно проверять, что _beginthreadex действительно
вернула валидный хэндл, а не NULL. То же самое и для WaitForMultipleObjects -
она ведь может вернуть ошибку, после чего поведение кода станет
непредсказуемым (гонка между main и функциями потока).
2
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
29.10.2016, 11:10
Цитата Сообщение от nd2 Посмотреть сообщение
Мне глубоко плевать на кроссплатформенность, и на то, как, и что там реализуется.
А зря.
Цитата Сообщение от nd2 Посмотреть сообщение
Я знаю, что в С++ нет этого
process.h MinGW
Цитата Сообщение от nd2 Посмотреть сообщение
_beginthreadex
Цитата Сообщение от nd2 Посмотреть сообщение
_endthreadex(0)
C++
1
2
3
4
5
6
//...
  _CRTIMP uintptr_t __cdecl _beginthread(void (__cdecl *_StartAddress) (void *),unsigned _StackSize,void *_ArgList);
  _CRTIMP void __cdecl _endthread(void) __MINGW_ATTRIB_NORETURN;
  _CRTIMP uintptr_t __cdecl _beginthreadex(void *_Security,unsigned _StackSize,unsigned (__stdcall *_StartAddress) (void *),void *_ArgList,unsigned _InitFlag,unsigned *_ThrdAddr);
  _CRTIMP void __cdecl _endthreadex(unsigned _Retval) __MINGW_ATTRIB_NORETURN;
//...
+ ещё в куче либ в названии которых есть thread.
Цитата Сообщение от nd2 Посмотреть сообщение
HANDLE
Этого вообще навалом.
Цитата Сообщение от nd2 Посмотреть сообщение
WaitForSingleObject
synchapi.h MinGW
C++
1
2
3
//...
WINBASEAPI DWORD WINAPI WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds);
//...
Кстати сразу с хендлом.
Цитата Сообщение от nd2 Посмотреть сообщение
MessageBox
И это там тоже есть.

Это мало того, что имеет отношение к С++, это на нём реализовано.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.10.2016, 15:12
Цитата Сообщение от GbaLog- Посмотреть сообщение
А зря.
Цитата Сообщение от GbaLog- Посмотреть сообщение
_endthreadex(0)
Цитата Сообщение от GbaLog- Посмотреть сообщение
WaitForSingleObject
Цитата Сообщение от GbaLog- Посмотреть сообщение
HANDLE
Цитата Сообщение от GbaLog- Посмотреть сообщение
MessageBox
В стандарте мне это покажи.
Цитата Сообщение от GbaLog- Посмотреть сообщение
Это мало того, что имеет отношение к С++, это на нём реализовано.
Цитата Сообщение от nd2 Посмотреть сообщение
Я знаю, что в С++ нет этого:
, но на нём реализовано. На С++ много что реализовано, и что: реализованное становится языком С++? GbaLog-, не смеши...
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
29.10.2016, 15:20
Цитата Сообщение от nd2 Посмотреть сообщение
реализованное становится языком С++?
Вы не передергивайте, я не говорил, что оно стало языком С++, я сказал, что это имеет к нему отношение.
Цитата Сообщение от nd2 Посмотреть сообщение
В стандарте мне это покажи.
Откуда вообще реализация в стандарте?
Это всё implementation-defined, но, как я уже говорил, во всех популярных компиляторах это реализовано, скорее всего, именно через Win API( для windows(!) ). К тому же с любым компилятором С++ поставляется и библиотека windows.h. Думаете это просто так сделано?

Добавлено через 53 секунды
Цитата Сообщение от nd2 Посмотреть сообщение
GbaLog-, не смеши...
Давайте всё-таки на Вы, мы с Вами на Ты не переходили.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.10.2016, 15:34
Цитата Сообщение от GbaLog- Посмотреть сообщение
во всех популярных компиляторах это реализовано
Ещё раз: мне глубоко плевать, где, что, и как реализовано. В языке С++ этого нет.
Цитата Сообщение от GbaLog- Посмотреть сообщение
я не говорил, что оно стало языком С++, я сказал, что это имеет к нему отношение.
Я понимаю, что всё написанное на С++ имеет, в этом, отношение к С++. Когда я говорю, что это не имеет отношения к С++, то имею ввиду: этого нет в языке С++. Ещё вопросы?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
29.10.2016, 15:40
Цитата Сообщение от nd2 Посмотреть сообщение
Ещё вопросы?
Нет. Я понял, С++ не существует дальше стандарта.

Добавлено через 1 минуту
Цитата Сообщение от nd2 Посмотреть сообщение
Когда я говорю, что это не имеет отношения к С++, то имею ввиду: этого нет в языке С++.
Ну вот так бы сразу и сказали.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.10.2016, 16:17
Цитата Сообщение от GbaLog- Посмотреть сообщение
Я понял, С++ не существует дальше стандарта.
Нет. Для меня, язык С++, не существует дальше стандарта.
А поэтому:
Цитата Сообщение от nd2 Посмотреть сообщение
в С++ нет этого:


Добавлено через 27 минут
И поэтому,
WinAPI: https://www.cyberforum.ru/win-api/
Qt: https://www.cyberforum.ru/qt/
Boost: https://www.cyberforum.ru/boost-cpp/
Builder: https://www.cyberforum.ru/cpp-builder/
Управляемый код: https://www.cyberforum.ru/cpp-cli-winforms/
и т.д., и т.п.
0
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
03.11.2016, 00:12  [ТС]
Ребят, долгими потугами так и не сумел заставить
C++
1
WaitForMultipleObjects
и
C++
1
_beginthreadex
работать так как нужно, а нужно именно так:

Запускаем N потоков, независимых не последовательных а параллельных, поэтому все варианты с WaitForSingleObjects я отмел, также как и отмел std::async, это как я понял совершенно не параллельные вещи, и смысл их для меня достаточно туманен, единственный вариант который для меня оказался приемлемым это нативный thread.

Я подозреваю что сделал много косяков в коде, что-то нагуглил, что-то добавил, что-то подпортил.
Но в результате запускаю 5000 потоков и они отрабатываются в 9 из 10 раз, в одном мать его разе всеже ловлю ошибку.
Конечно это дикий прогресс, но хотелось бы всетаки докопаться до сути.
Может быть кто-то сможет подсказать как лучше оптимизировать и защитить код, чтобы уж совсем наверняка.

В кратце что происходит по задумке ниже:

В main запускается потоки, далее включается таймер на длительность работы потоков, т.е. имитация выключения их если они зависли.
Т.е. поток закрываться мог в 2х вариантах, в первом случае нормально, когда юзер нажимает на кнопочку ОК в msgBox, а во втором случае я имитирую зависание, и должно срабатывать по таймеру, юзер то уснул, кнопку не нажимает, или просто какой-то сбой.
В первом случае, если юзер кнопку нажал, то поток должен отработать нормально, и потом закрываться по Join, во втором же случае я его умышлено терменирую.

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

Таким образом, если поток не detach, по идее должны били срабатывать Join для каждого потока и он должен был по человечески закрываться.
Однако при передачи в Join у меня потоки зависали. Поэтому пошел кривым путем и перед проверкой на Join решил убивать потоки по их системному хендлу. Я очень не хочу этого делать, но не знаю как именно решить эту проблему, не понимаю.
В итоге получилось через одно место, даже нормально выполненные потоки не могу закрыть через Join.

Пожалуйста ребят подскажите как быть, мозгов не хватает чтобы все это привести в обертку RAII, если кому-то не лень подскажите пожалуйста как быть.
Весь код ниже, также в нем дополнительные комментарии, в частности не понятно поведение оператора continue, программа не компилируется если открыть комментарий.



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
#include <mutex>
#include <chrono>
#include <thread>
#include <iostream>
#include <Windows.h>
#include <condition_variable>
 
 
using namespace std;
 
mutex MUTEX;
 
int thread_count = 0;
bool time_to_quit = false;
condition_variable cv;
 
 
  void f1(void* n)
 {
     int p = (int)n;
     {
         std::lock_guard<std::mutex> _(MUTEX);
         ++thread_count;
     }
 
     char buffer[100];
     wsprintf(buffer, "%u", p);
     MessageBox(0, buffer, "", 0);
 
     while (true)
     {
 
         {
             std::lock_guard<std::mutex> _(MUTEX);
             std::cout << "thread " << p << " working\n";
         }
         ///////////////////////////////////////////////////////////
         std::this_thread::sleep_for(std::chrono::milliseconds(500)); 
         ///////////////////////////////////////////////////////////
         std::lock_guard<std::mutex> _(MUTEX);
         if (time_to_quit)
             break;
     }
 
     std::lock_guard<std::mutex> _(MUTEX);
     std::cout << "thread "<< p << " ended\n";
     --thread_count;
    // cv.notify_all();
     cv.notify_one();
  }
 
  int main()
{
 
    const int N = 50; // Количество потоков
    thread tt[N]; 
    int SecPause = 5;
 
 
    typedef std::chrono::steady_clock Clock;
 
 
 
 
    for (int i = 0; i < N; i++)
    {
        cout << "Message from main Start_" << i << "\n" << endl;
 
                tt[i] = thread(&f1, (void*)i);
                cout << "Potok" << i << " nat hand_" << tt[i].native_handle() << " \n";
//              tt[i].detach();
    }
 
    auto t0 = Clock::now();
    auto t1 = t0 + std::chrono::seconds(SecPause);
    std::unique_lock<std::mutex> lk(MUTEX);
    while (!time_to_quit && Clock::now() < t1)
    {
        cv.wait_until(lk, t1);
    }
    
 
    time_to_quit = true;
    std::cout << "Time Out ending HERE\n";
 
    
    std::cout << "TRY TO FIN FIN\n";
    for (int i = 0; i < N; i++)
    {
/////////Удаляю по системному хендлу, без желания, но если перенести этот блок//////////////////////////////////
/////////после Join программа до него не доходит и висит, в итоге и Join не/////////////////////////////////////
////////работает и поток висит//////////////////////////////////////////////////////////////////////////////////
        try {
            std::cout << "UUps Time is Out\n";
            if (TerminateThread(tt[i].native_handle(), 0))
                {std::cout << "Well Done: potok_" << i << " nat hand_" << tt[i].native_handle() <<" is Dead \n";}
            //continue; // оператор не обрабатывается выкидывает ошибку, программа виснет
            }
        
        catch (int Error)
        {
            cout << Error << endl;
        }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
        std::cout << "TRY TO FIN CORRECTLY" << i<<" \n";
        if (tt[i].joinable())
        {
            try
                {
                    std::cout << "potok" << i << " nat hand_" << tt[i].native_handle() << " \n";
                    tt[i].join();
                }
            catch (int Error)
            {
                std::cout << "Sorry Error Here Destroy_"<<Error<<"\n";
 
            }
        }
 
 
    }
 
 
    return 0;
    
 
}
Добавлено через 15 минут
Ребят проблема вообще решаема, или придется подключать Intel TBB или Boost для адекватного распараллеливания и управления потоками?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.11.2016, 00:46
Цитата Сообщение от lostandleft Посмотреть сообщение
Однако при передачи в Join у меня потоки зависали.
причина в 76й строке
Цитата Сообщение от lostandleft Посмотреть сообщение
C++
1
std::unique_lock<std::mutex> lk(MUTEX);
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
03.11.2016, 00:49
Цитата Сообщение от lostandleft Посмотреть сообщение
C++
1
if (TerminateThread(tt[i].native_handle(), 0))
У меня, mingw, такое не компилирует:
error: invalid conversion from 'std::thread::native_handle_type {aka unsigned int}' to 'HANDLE {aka void*}' [-fpermissive]
0
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
03.11.2016, 00:56  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
У меня, mingw, такое не компилирует:
Все делаю в VS2015

Цитата Сообщение от Max Dark Посмотреть сообщение
причина в 76й строке
Пробую, ковыряюсь...а по организации кода порекомендовать можете что-нибудь?
Он ведь кривой видимо до безумия, почему continue не компилируется в цикле?

PS если лень читать и пробовать я понимаю, кода много но я старался все по блокам красиво указать, спасибо за проявленный интерес.
0
03.11.2016, 00:58

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
У меня, mingw, такое не компилирует:
std::thread::native_handle_type зависит от компилятора.
VC++ использует HANDLE
в MinGW std::thread реализован с использованием pthreads

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
03.11.2016, 01:01
Max Dark, понятно. Благодарю.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.11.2016, 01:07
Цитата Сообщение от lostandleft Посмотреть сообщение
а по организации кода порекомендовать можете что-нибудь?
не смешивайте разные средства для работы с потоками - они друг о друге ничего не знают(std::thread ничего не знает от том, что вы прибили поток через WinAPI)
Цитата Сообщение от lostandleft Посмотреть сообщение
почему continue не компилируется в цикле?
компилируется.
ошибку выдает деструктор std::thread, если объект потока находится в состоянии joinable == true
1
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
03.11.2016, 01:14  [ТС]
Цитата Сообщение от Max Dark Посмотреть сообщение
компилируется.
Может быть я ошибся, и не до конца понял суть проблемы, спасибо Вам, попробую завтра опять поковырять...тяжело блин
Мозги слабо работают, нужно было раньше запоститься, все думал сам доковыряю, но никак.
Уже 4 утра, очень хотел бы сегодня разобраться, но уже не смогу физически.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
03.11.2016, 02:54
Цитата Сообщение от Max Dark Посмотреть сообщение
не смешивайте разные средства для работы с потоками - они друг о друге ничего не знают
Если правильно понимаю, то и MessageBox тут тоже не очень подходит.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.11.2016, 03:30
Цитата Сообщение от nd2 Посмотреть сообщение
MessageBox тут тоже не очень подходит
Честно говоря, я не уверен на этот счет. Нужно документацию порыть...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.11.2016, 03:30
Помогаю со студенческими работами здесь

Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000
Есть задача Есть решение Основное приложение: #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Необработанное исключение по адресу 0x0000000077651DA0 (ntdll.dll) в ProjecktExperement2.exe: 0xC0000005: нарушение прав
Необработанное исключение по адресу 0x0000000077651DA0 (ntdll.dll) в ProjecktExperement2.exe: 0xC0000005: нарушение прав доступа при чтении...

CreateThread или beginthreadex
Как-то так повелось что при создании потока я использую ф-цию CreateThread. Тем не менее, все почему-то советуют пользоваться...

Ошибка ntdll.dll
Всем привет! У меня Macbook Pro Retina 13' 2015 (128gb) и у меня проблема с запуском игры на нем. Установил Windows 8.1 через Bootcamp,...

Wine - Ошибка ntdll.dll
Приветствую товарищи! Обращаюсь к вам с проблемой. Поставил я вайн на убунту и хочу юзать http://www.rstat.ru/RetailStat_2.4.zip...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru