а кто-то подразумевал что и кухарка справится
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 587
|
|||
карма: 4 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): Тогда я четко видел когда поток еще выполняетсяNeo, если актуально, могу научить как из одного потока (например, основного) "общаться жестами" с другими потоками. Не передавать данные, но узнавать о самом факте наступления какого-либо события, например, того же конца обработки данных, смотрите:
andrestudio, [flood] andrestudio писал(а): кто-то подразумевал что и кухарка справитсяВидимо, та же самая, что "может управлять государством" [/flood] ------------ Дoбавленo в 11.18: 1nd1g0 писал(а): узнавать о самом факте наступления какого-либо событияПричём теоретически (если как-то передадите ObjHandle) можно устанавливатьреагировать на событие не только в другом потоке, но и в другой программе (!), запущенной от имени этого же пользователя. (Подобный механизм реализуется системным Mutex.) |
|||
карма: 1 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
1nd1g0 писал(а): наступления какого-либо события, например, того же конца обработки данныхТо же самое, но с критическими секциями code_24950.txt ------------ Дoбавленo в 11.40: Хотя, в данном варианте критические секции можно выкинуть вообще. Вероятность совпадения двух сбытий, в данном случае, стремится к нулю |
|||
карма: 22 |
| ||
файлы: 1 | code_24950.txt [1.2KB] [235] |
Ответов: 704
Рейтинг: 7
|
|||
Спасибо за помощь и толкование!
andrestudio, кухарка она ведь разная бывает. Да и с (как сказал 1nd1g0, текстовым программированием) справиться вроде и совсем не сложно. Основные проблемы наступают при повышенных скоростях, тем более при активом управлении потоками - просто мало знаний. Вроде думаешь как и обычно - связал 2 точки и оно само как-то там будет работать, а вот и не всегда так. Сколько уже схем и схемок загубил без подозрения существования даже вот критических секций. А за каждой ерундой ведь на форум писать не будешь... Хотя уже не раз поднимал на счет вопросов производительности компонентов, схемок - чаще приходится угадывать опытным путем. Из своего малого опыта, думаю уже просится раздел справки именно по культуре программирования в HiAsm. Я вот набегами занимаюсь, и пропустил, что использовать ЭвентФромДата вместо Мемори - зло. Хотя иконки у них схожие с безобидным ДуДата. Вот такие пирожки. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Neo писал(а): использовать ЭвентФромДата вместо Мемори - зло. |
|||
карма: 25 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): без подозрения существования даже вот критических секцийЭто потому, что HiAsm не избавляет от необходимости знать мат.часть, он даёт доступ ко многим требующим профессиональных навыков технологиям, и именно благодаря этому на нём можно делать достаточно серьёзные приложения. А SafeMode просто не был документирован до позавчерашнего дня, его почти никто не знал |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
А еще вопросик на счет потока: поток обязательно доходит до завершения, или бывает что он входит в элемент (какой-то) а после обработки элемент выдает уже другой поток? Как понять после какого события поток прекратится, и дальнейшая обработка запустится в новом потоке?
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): поток обязательно доходит до завершения, или бывает что он входит в элемент (какой-то) а после обработки элемент выдает уже другой поток?Если поток начался, то он будет идти до победного конца, пока не упрётся в "тупик". Neo писал(а): после обработки элемент выдает уже другой поток?Да, если в конце стоит элемент, порождающий новый поток, например, Thread или MMTimer. Изредка бывает, что некоторые события элементов (или чьего-то InlineCode) создаются системой и могут отличаться по контексту от текущего потока, в таком случае с ними желательно работать как с отдельным потоком (те же меры предосторожности). Основная масса штатных элементов не использует таких технологий, т.е. "какой поток был на входе, такой же будет на выходе". |
|||
карма: 1 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
1nd1g0 писал(а): Да, если в конце стоит элемент, порождающий новый поток, например, Thread или MMTimer. Бывает, что некоторые события элементов создаются системой и могут отличаться по контексту от текущего потока, в таком случае с ними желательно работать как с отдельным потоком (те же меры предосторожности)Работа с порожденными потоками вообще жесть. Тут такие ситуации возникают -- мама не горюй. К примеру -- породили поток, что-то обрабатываем, чтобы не мешало обрабатывать дальше порождаем новый поток внутри порожденного, к примеру, для чтения каких-то данных. При составлении схемы или кода, про второго наследника забываем и грохаем основной порожденный, а второй наследник продолжал читать файл. К быбушке не ходи, что бы сказать, что такое построение вызовет крэш. |
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco писал(а): К бабушке не ходи, что бы сказать, что такое построение вызовет крэш.andrestudio писал(а): а кто-то подразумевал что и кухарка справится |
|||
карма: 4 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Для более глубокого понимания критических секций, постараюсь привести очень простую аналогию из вполне жизненной ситуации. Предположим, у нас есть два ж/д пути, сходящихся в один. Если пустить по ним поезда, то вероятность столкновения двух поездов при схождении в один путь будет совсем не нулева, а последствия катастрофические. Чтобы такого не произошло, пути снабжают семафорами и датчиками наличия поезда, на расстонии большем длины поезда -- каждый датчик одного пути управляет семафором другого пути. При прохождении поезда через датчик, включается семафор на другом пути и идущий второй поезд останавливается, ожидая прохождения первого. Это есть не что иное, как работат SafeMode в режиме Wite. В режиме noWite, ситуаци больше похожа не на поезда, а на самолеты, когда при заходе на посадку, посадочная полоса занята, и самолет отправляют на второй круг
|
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
nesco писал(а): на самолетыа где он кружится в этом случае? Как быть другим самолетам, которые подлетают? |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): Как быть другим самолетам, которые подлетают?Дружно водят хоровод на разных уровнях. То же будет с потоками (дружно зависнут на SafeMode до победного конца либо дружно завершат текущую итерацию). |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
И не догонит ли еще один поезд в корму того, который остановился на семафоре? Или они сами остановятся на безопасном для столкновения расстоянии
------------ Дoбавленo в 13.55: Какие они дружные )) Только не пойму смысла - все равно на полосу не сядут и на семафор не проедут хоть там Wite, хоть NoWite ------------ Дoбавленo в 13.56: Получается своего рода организованный стек FIFO только с подвисанием при накоплении? |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): догонит ли еще один поезд в корму того, который остановился на семафоре? Система предупреждения есть, но иногда выходит из строя (вспомним недавние новости). У потоков вариант такого "нагона" тоже предусмотрен, пока не отработает одна итерация потока (например, подвисла по Wait), вторая не вызывается. ------------ Дoбавленo в 14.06: Neo писал(а): все равно на полосу не сядут и на семафор не проедутЕсли движение не остановилось (заблокировавший секциюмьютекс первым поток не завис), то все по очереди отработают то, что должны были отработать (SafeMode.WaitMode=Wait), если не отказались от попыток вовсе (NoWait + Thread.FastStopdoStop). |
|||
карма: 1 |
|