Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 05:32:18 |
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 05:32:19 |
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 05:32:19 |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
схему в студию
|
|||
карма: 2 |
|
Ответов: 9906
Рейтинг: 351
|
|||
и во везде срабатывало событие onValue Гусары - МАЛЧАТЬ |
|||
карма: 9 |
|
Ответов: 4629
Рейтинг: 749
|
|||
MailSlot_Server использует стандартный класс потока и его метод Synchronize. Этот метод не работает в консольном приложении.
Можно в THIMailSlot_Server._OnExec перед Sender.Synchronize(SyncExec) проверять наличие Applet, если нет - делать просто вызов SyncExec. |
|||
карма: 26 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Netspirit писал(а): если нет - делать просто вызов SyncExecА кто за последствия отвечать будет: тот - кто внес предложение, или тот - кто внес правку на svn |
|||
карма: 9 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Последствия будут только если в программе будет намешано много других потоков, которые будут работать с одними и теми же данными. В такой ситуации пользователю нужно будет разбираться с конкурирующими потоками независимо от наличия компонента MailSlot_Server. На форуме помогут.
Во всяком случае "не работает" против "работает, но с осторожностью" |
|||
карма: 26 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Netspirit писал(а): только если в программе будет намешано много других потоков, которые будут работать с одними и теми же данными."Если" - уже есть безусловно. Если мы заводим поток (а мы заводим), то значит у нас есть уже хотя бы один, из которого и заводим. Лучше скажите мне, какая такая есть Великая Причина, заставляющая делать именно консольное приложение, а не оконное (например - невидимое). По мне, таковая может быть только одна - не хочу заморачиваться с обработкой очереди сообщений. Ну тогда и не надо искать у отвертки usb-порт. И не надо приделывать его к отвертке. Как мне кажется |
|||
карма: 9 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Galkov писал(а): то значит у нас есть уже хотя бы одинВ случае консольного мультипоточного приложения этот поток после запуска полезной работы в параллельных потоках ставится на паузу, чтобы не дать закрыться программе, пока не отработают полезные потоки. А вот регулирование взаимодействия полезных потоков - задача программиста (как и в визуальных приложениях). Метод Synchronize - один из вариантов, и то не самый оптимальный. Про причины создания консольных приложений - без понятия. ------------ Дoбавленo в 13.15: Пример консольного MailSlot - сервера: mailslot console server.sha Пример клиента: mailslot client.sha Попробуйте поотправлять данные серверу: вы ничего не увидите, так как сервер не работает в консольном приложении. Внесите следующую поправку в файле hiMailSlot_Server.pas (в процедуре THIMailSlot_Server._OnExec):
В консольном примере работает 3 потока. Проблем не заметил (что не отменяет вышеизложенных соображений по работе с потоками в более сложных схемах) [offtop]PS: отдельно зацените "удобство" метода doCreate в компоненте Events[/offtop] |
|||
карма: 26 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Netspirit писал(а): В консольном примере работает 3 потока. Проблем не заметил (что не отменяет вышеизложенных соображений по работе с потоками в более сложных схемах)Хех Вы подтвердили еще раз мое наблюдение: Вот я тебе расскажу, чем Инженер отличается от IT-шника. Второму нужны доказательства, для того, чтобы делать лучше. А первому - доказательства, чтобы делать хуже. "Проблем не заметил" - не означает, что их нет (с этого начинали Классики Программирования). Вам нужны доказательства - что они есть, а мне - что их нет. В полном соответствии с вышеприведенным высказыванием. |
|||
карма: 9 |
|
Ответов: 4629
Рейтинг: 749
|
|||
Galkov писал(а): Вам нужны доказательства - что они естьGalkov писал(а): Второму нужны доказательства, для того, чтобы делать лучше.Galkov писал(а): "Проблем не заметил" - не означает, что их нетРедактировалось 1 раз(а), последний 2019-06-03 10:45:36 |
|||
карма: 26 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Netspirit писал(а): что сделал лучше потому, что заставил работать то, что не работало в заданных условияхНет, не заставил. Ты сказал, что проблем не заметил. А это не означает, что он работает. Мне нужны доказательства, что оно работает. Потому-что я Инженер. "Проблем не заметил", доказательством к этому не является. А тебе не нужны. Netspirit писал(а): Мне не нужны доказательства, что с потоками могут быть проблемы - я имею достаточное представление о их работе, чтобы заставлять их работать там, где мне нужноНо предложил решение тому, кто об этом не знает. И внести это в элемент. Я ничего не перепутал Galkov писал(а): Не планируй себе проблем, попробуй сначала справиться с теми, которые возникнут (а они возникнут) и без твоего планированияNetspirit, нет у меня желания спорить. Это разные концепции. ПРОСТО, я положил себе копилку еще одно наблюдение. И сообщил об этом. Хочешь "планировать себе проблемы" - планируй. Ну не могу я тебе этого запретить, конечно же. |
|||
карма: 9 |
|
Ответов: 4629
Рейтинг: 749
|
|||
С наблюдением - не спорю, правильное наблюдение.
Galkov писал(а): Мне нужны доказательства, что оно работает.Galkov писал(а): Я ничего не перепутал?Вопрос в том, считаем ли мы это плохим или нет. Я - не считаю. "Не работает в консоли" хуже, чем "работает, но в параллельном потоке". Что плохого в принципе "работает, но в параллельном потоке"? То, что пользователь обратится на форум с ошибкой в схеме, ему объяснят про потоки, предложат решение? Не будем здесь акцентировать на нежелании пользователей учиться и т.п. |
|||
карма: 26 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Netspirit писал(а): Доказательством есть предложенная схема - она работает.Не поленюсь повториться: Никакое тестирование не доказывает работоспособность программы. Оно лишь может доказать ее неработоспособность Добавлю лишь, что это не мое мнение. И даже не предмет обсуждения. Netspirit писал(а): "Не работает в консоли" хуже, чем "работает, но в параллельном потоке"Ключевое слово - "работает". Если говорить об изменении в элементе, то работоспособность некой одной схемы - вообще надо засунуть куда подальше. И в топике говорилось не о неработоспособности конкретной схемы, а о неработоспособности MailSlot в консольном приложении. А по результатам теста можно лишь заключить о: "возможно заработает". И не более. А сослагательное наклонение, по определению - ХУЖЕ. Было бы лучше, сразу бы выкинули событие на улицу, безо всякого Synchronize. Типа - "у юзера голова большая, пусть думает. Если чего - пусть на форум обращается, там помогут". Не подумайте, что я вообще против асинхронной работы. Есть необходимость - надо работать. С другим уровнем знаний, правда. Но мне нужно предъявить эту необходимость. И первое, что я и спросил - нафига консоль. А Вас, Netspirit, этот вопрос вообще не взволновал. Разницу в концепциях ощущаете Netspirit писал(а): ему объяснят про потоки, предложат решениеКак же, плавали - знаем. Приходит юзер, и спрашивает "у меня схема из 2000 элементов, раз в два дня падает. Раньше реже падала... Чего делать?" Можно еще добавить, что пока была размером с Ваш тест - вообще не падала. Типа " Работает - и точка." Не приведете ссылочку на полезный совет по такой проблеме |
|||
карма: 9 |
|