Вверх ↑
Ответов: 704
Рейтинг: 7
#1: 2011-10-11 13:59:11 ЛС | профиль | цитата
1nd1g0 писал(а):
система передаёт управление другим, и не дай бог это какое-нибудь чтение из стека, в который, например, наполовину не дописались данные из параллельного потока, а система приостановила запись и отдала управление потоку чтения

Получил для себя "открытие Америки"
Для меня казалось что оно все выполняется и выполняется себе по веточкам. А выходит (если я уловил) что все параллельные потоки, которые в программе, прерываются по-очереди чтоб не получалось застойных потоков? И тогда я не пойму как мне расставить SafeMode возле стека, чтоб убить ошибку Access Violation at address... (поскольку с применением SafeMode Wait на запись в стек она снова вернулась) и не получать 100% загрузку одноядерного процессора. Не ставлю SafeMode - получается загрузка под 100, ставлю - получаю стабильно Access Violation at address...

При этом всем у меня получается все в параллельных потоках: его создает асинхронный com-порт - передает в 3 разных стека; из трех стеков запускается обработка в новых потоках; из 2 из этих новых потоков запускается еще одна обработка в новых потоках (после работы с БД, которая убивает новый поток). Получается, что изначально из-за com-порта, который плюется потоками, вся основная программа почти не выполняется в системном потоке. Отсюда и такая ерунда с отладкой

Стек гарантированно наполняется медленнее, чем считываются данные из него. Например наполнение раз в 2 секунды 1 значением, а считывание с обработкой занимают не больше секунды. Хотя бывает что за раз приходит в стек 6 строк, но гарантированно затишье на минуту+.
------------ Дoбавленo в 13.59:
Еще добавлю, что есть стек, в который пишется и читается из разных потоков. И каждое дейтвие на запись должно быть обязательно выполнено, как и действие на чтение. Посему на запись и на чтение я поставил по SafeMode Wait - я сделал глупость или нет?
карма: 0

0