|
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
|
|||||||
Многопоточность, _beginthreadex, ошибка ntdll.dll28.10.2016, 00:26. Показов 6931. Ответов 70
Метки нет (Все метки)
Здравствуйте, собственно сабж.
Посмотрите пожалуйста комментарии в коде. Как исправить ситуацию, не правильно запускаются потоки?
0
|
|||||||
| 28.10.2016, 00:26 | |
|
Ответы с готовыми решениями:
70
Вызвано исключение по адресу 0x772C09D6 (ntdll.dll)
При запуске своей проги на Windows 7, ругается на ntdll.dll |
|
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
|
||
| 29.10.2016, 00:09 [ТС] | ||
|
На нативном с++ не существует потоков? А я посчитал что вы как раз на них указали постом выше, только к несчастью без примеров.
0
|
||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|||
| 29.10.2016, 00:21 | |||
|
Добавлено через 45 секунд http://ru.cppreference.com/w/c... ead/thread
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 29.10.2016, 00:22 | |
|
0
|
|
|
Ушел с форума
|
|
| 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
|
|
|
Любитель чаепитий
|
||||||||||||||||||
| 29.10.2016, 11:10 | ||||||||||||||||||
Это мало того, что имеет отношение к С++, это на нём реализовано.
0
|
||||||||||||||||||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
||||||||
| 29.10.2016, 15:12 | ||||||||
|
0
|
||||||||
|
Любитель чаепитий
|
||||
| 29.10.2016, 15:20 | ||||
|
Это всё implementation-defined, но, как я уже говорил, во всех популярных компиляторах это реализовано, скорее всего, именно через Win API( для windows(!) ). К тому же с любым компилятором С++ поставляется и библиотека windows.h. Думаете это просто так сделано? Добавлено через 53 секунды
0
|
||||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|||
| 29.10.2016, 15:34 | |||
|
0
|
|||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|||
| 29.10.2016, 16:17 | |||
|
А поэтому: ![]() Добавлено через 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 [ТС] | ||||||||||||||||
|
Ребят, долгими потугами так и не сумел заставить
Запускаем N потоков, независимых не последовательных а параллельных, поэтому все варианты с WaitForSingleObjects я отмел, также как и отмел std::async, это как я понял совершенно не параллельные вещи, и смысл их для меня достаточно туманен, единственный вариант который для меня оказался приемлемым это нативный thread. Я подозреваю что сделал много косяков в коде, что-то нагуглил, что-то добавил, что-то подпортил. Но в результате запускаю 5000 потоков и они отрабатываются в 9 из 10 раз, в одном мать его разе всеже ловлю ошибку. Конечно это дикий прогресс, но хотелось бы всетаки докопаться до сути. Может быть кто-то сможет подсказать как лучше оптимизировать и защитить код, чтобы уж совсем наверняка. В кратце что происходит по задумке ниже: В main запускается потоки, далее включается таймер на длительность работы потоков, т.е. имитация выключения их если они зависли. Т.е. поток закрываться мог в 2х вариантах, в первом случае нормально, когда юзер нажимает на кнопочку ОК в msgBox, а во втором случае я имитирую зависание, и должно срабатывать по таймеру, юзер то уснул, кнопку не нажимает, или просто какой-то сбой. В первом случае, если юзер кнопку нажал, то поток должен отработать нормально, и потом закрываться по Join, во втором же случае я его умышлено терменирую. Технически, при срабатывании таймера в каждый из потоков передается сигнал о том, что пора бы закончиться, далее срабатывают мютексы и по идее поток должен закрываться. Таким образом, если поток не detach, по идее должны били срабатывать Join для каждого потока и он должен был по человечески закрываться. Однако при передачи в Join у меня потоки зависали. Поэтому пошел кривым путем и перед проверкой на Join решил убивать потоки по их системному хендлу. Я очень не хочу этого делать, но не знаю как именно решить эту проблему, не понимаю. В итоге получилось через одно место, даже нормально выполненные потоки не могу закрыть через Join. Пожалуйста ребят подскажите как быть, мозгов не хватает чтобы все это привести в обертку RAII, если кому-то не лень подскажите пожалуйста как быть. Весь код ниже, также в нем дополнительные комментарии, в частности не понятно поведение оператора continue, программа не компилируется если открыть комментарий.
Ребят проблема вообще решаема, или придется подключать Intel TBB или Boost для адекватного распараллеливания и управления потоками?
0
|
||||||||||||||||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|
| 03.11.2016, 00:49 | |
|
0
|
|
|
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
|
|||
| 03.11.2016, 00:56 [ТС] | |||
|
Он ведь кривой видимо до безумия, почему continue не компилируется в цикле? PS если лень читать и пробовать я понимаю, кода много но я старался все по блокам красиво указать, спасибо за проявленный интерес.
0
|
|||
| 03.11.2016, 00:58 | |
|
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|
| 03.11.2016, 01:01 | |
|
Max Dark, понятно. Благодарю.
0
|
|
|
Диванный эксперт
|
|||
| 03.11.2016, 01:07 | |||
|
ошибку выдает деструктор std::thread, если объект потока находится в состоянии joinable == true
1
|
|||
|
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
|
||
| 03.11.2016, 01:14 [ТС] | ||
![]() Мозги слабо работают, нужно было раньше запоститься, все думал сам доковыряю, но никак. Уже 4 утра, очень хотел бы сегодня разобраться, но уже не смогу физически.
0
|
||
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|
| 03.11.2016, 02:54 | |
|
0
|
|
|
Диванный эксперт
|
||
| 03.11.2016, 03:30 | ||
|
0
|
||
| 03.11.2016, 03:30 | |
|
Помогаю со студенческими работами здесь
40
Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000 Необработанное исключение по адресу 0x0000000077651DA0 (ntdll.dll) в ProjecktExperement2.exe: 0xC0000005: нарушение прав
Ошибка ntdll.dll Wine - Ошибка ntdll.dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура слоя интернета для сервера-слоя.
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
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|