Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#1: 2014-07-06 20:14:08 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 05:32:18
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#2: 2014-07-06 20:26:29 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 05:32:19
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2014-07-06 20:40:39 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 05:32:19
карма: 0

0
Ответов: 1343
Рейтинг: 31
#4: 2014-07-07 11:00:57 ЛС | профиль | цитата
схему в студию
карма: 2

0
Ответов: 9906
Рейтинг: 351
#5: 2014-07-07 11:18:34 ЛС | профиль | цитата
и во везде срабатывало событие onValue
Гусары - МАЛЧАТЬ

карма: 9

0
Ответов: 4630
Рейтинг: 749
#6: 2014-07-07 11:24:43 ЛС | профиль | цитата
MailSlot_Server использует стандартный класс потока и его метод Synchronize. Этот метод не работает в консольном приложении.
Можно в THIMailSlot_Server._OnExec перед Sender.Synchronize(SyncExec) проверять наличие Applet, если нет - делать просто вызов SyncExec.

карма: 26

0
Ответов: 9906
Рейтинг: 351
#7: 2014-07-07 11:34:54 ЛС | профиль | цитата
Netspirit писал(а):
если нет - делать просто вызов SyncExec

А кто за последствия отвечать будет: тот - кто внес предложение, или тот - кто внес правку на svn

карма: 9

0
Ответов: 4630
Рейтинг: 749
#8: 2014-07-07 11:45:26 ЛС | профиль | цитата
Последствия будут только если в программе будет намешано много других потоков, которые будут работать с одними и теми же данными. В такой ситуации пользователю нужно будет разбираться с конкурирующими потоками независимо от наличия компонента MailSlot_Server. На форуме помогут.
Во всяком случае "не работает" против "работает, но с осторожностью"
карма: 26

0
Ответов: 9906
Рейтинг: 351
#9: 2014-07-07 12:45:21 ЛС | профиль | цитата
Netspirit писал(а):
только если в программе будет намешано много других потоков, которые будут работать с одними и теми же данными.

"Если" - уже есть безусловно. Если мы заводим поток (а мы заводим), то значит у нас есть уже хотя бы один, из которого и заводим.

Лучше скажите мне, какая такая есть Великая Причина, заставляющая делать именно консольное приложение, а не оконное (например - невидимое).
По мне, таковая может быть только одна - не хочу заморачиваться с обработкой очереди сообщений.

Ну тогда и не надо искать у отвертки usb-порт.
И не надо приделывать его к отвертке.
Как мне кажется

карма: 9

0
Ответов: 4630
Рейтинг: 749
#10: 2014-07-07 13:15:19 ЛС | профиль | цитата
Galkov писал(а):
то значит у нас есть уже хотя бы один

В случае консольного мультипоточного приложения этот поток после запуска полезной работы в параллельных потоках ставится на паузу, чтобы не дать закрыться программе, пока не отработают полезные потоки. А вот регулирование взаимодействия полезных потоков - задача программиста (как и в визуальных приложениях). Метод Synchronize - один из вариантов, и то не самый оптимальный.

Про причины создания консольных приложений - без понятия.

------------ Дoбавленo в 13.15:

Пример консольного MailSlot - сервера: mailslot console server.sha
Пример клиента: mailslot client.sha
Попробуйте поотправлять данные серверу: вы ничего не увидите, так как сервер не работает в консольном приложении.
Внесите следующую поправку в файле hiMailSlot_Server.pas (в процедуре THIMailSlot_Server._OnExec):

#pas
function THIMailSlot_Server._OnExec;
var nBytesRead:cardinal;
begin
while not Sender.Terminated do begin
if ReadFile(ms, str[1], MAXWORD, nBytesRead, nil) then begin
SetLength(str,nBytesRead);
if Applet <> nil then
Sender.Synchronize(SyncExec)
else
SyncExec;
SetLength(str,MAXWORD);
end;
end;
Result := 0;
end;
Сервер заработает.
В консольном примере работает 3 потока. Проблем не заметил (что не отменяет вышеизложенных соображений по работе с потоками в более сложных схемах)

[offtop]PS: отдельно зацените "удобство" метода doCreate в компоненте Events[/offtop]

карма: 26

0
Ответов: 9906
Рейтинг: 351
#11: 2014-07-08 12:11:26 ЛС | профиль | цитата
Netspirit писал(а):
В консольном примере работает 3 потока. Проблем не заметил (что не отменяет вышеизложенных соображений по работе с потоками в более сложных схемах)


Хех
Вы подтвердили еще раз мое наблюдение:
Вот я тебе расскажу, чем Инженер отличается от IT-шника.
Второму нужны доказательства, для того, чтобы делать лучше.
А первому - доказательства, чтобы делать хуже.

"Проблем не заметил" - не означает, что их нет (с этого начинали Классики Программирования).
Вам нужны доказательства - что они есть, а мне - что их нет.
В полном соответствии с вышеприведенным высказыванием.

карма: 9

0
Ответов: 4630
Рейтинг: 749
#12: 2014-07-08 13:08:21 ЛС | профиль | цитата
Galkov писал(а):
Вам нужны доказательства - что они есть
Мне не нужны доказательства, что с потоками могут быть проблемы - я имею достаточное представление о их работе, чтобы заставлять их работать там, где мне нужно (и где это в принципе возможно). Соответственно, и многие грабли мне известны.

Galkov писал(а):
Второму нужны доказательства, для того, чтобы делать лучше.
Опять же, мне не нужны: я считаю что сделал лучше, потому что заставил работать то, что не работало в заданных условиях.

Galkov писал(а):
"Проблем не заметил" - не означает, что их нет
А означает, что есть некоторые задачи, для которых предоставлено рабочее решение. И то, что при работе с потоками следует соблюдать некоторые правила, не значит, что нужно любыми способами избегать применения потоков (мол, пусть приложение превращается в "кирпич" - зато надежно и не надо ещё и потоки изучать).

Редактировалось 1 раз(а), последний 2019-06-03 10:45:36
карма: 26

0
Ответов: 9906
Рейтинг: 351
#13: 2014-07-08 13:23:11 ЛС | профиль | цитата
Netspirit писал(а):
что сделал лучше потому, что заставил работать то, что не работало в заданных условиях

Нет, не заставил.
Ты сказал, что проблем не заметил.
А это не означает, что он работает.
Мне нужны доказательства, что оно работает. Потому-что я Инженер. "Проблем не заметил", доказательством к этому не является.
А тебе не нужны.

Netspirit писал(а):
Мне не нужны доказательства, что с потоками могут быть проблемы - я имею достаточное представление о их работе, чтобы заставлять их работать там, где мне нужно

Но предложил решение тому, кто об этом не знает. И внести это в элемент.
Я ничего не перепутал
Galkov писал(а):
Не планируй себе проблем, попробуй сначала справиться с теми, которые возникнут (а они возникнут) и без твоего планирования



Netspirit, нет у меня желания спорить. Это разные концепции.
ПРОСТО, я положил себе копилку еще одно наблюдение. И сообщил об этом.
Хочешь "планировать себе проблемы" - планируй. Ну не могу я тебе этого запретить, конечно же.

карма: 9

0
Ответов: 4630
Рейтинг: 749
#14: 2014-07-08 13:39:50 ЛС | профиль | цитата
С наблюдением - не спорю, правильное наблюдение.
Galkov писал(а):
Мне нужны доказательства, что оно работает.
Доказательством есть предложенная схема - она работает. Работает - и точка. Теперь могу выслушать контраргумент (как говоришь, "доказательство, что не работает").
Galkov писал(а):
Я ничего не перепутал?
Всё верно.
Вопрос в том, считаем ли мы это плохим или нет. Я - не считаю. "Не работает в консоли" хуже, чем "работает, но в параллельном потоке". Что плохого в принципе "работает, но в параллельном потоке"? То, что пользователь обратится на форум с ошибкой в схеме, ему объяснят про потоки, предложат решение? Не будем здесь акцентировать на нежелании пользователей учиться и т.п.

карма: 26

0
Ответов: 9906
Рейтинг: 351
#15: 2014-07-08 16:07:15 ЛС | профиль | цитата
Netspirit писал(а):
Доказательством есть предложенная схема - она работает.

Не поленюсь повториться: Никакое тестирование не доказывает работоспособность программы. Оно лишь может доказать ее неработоспособность
Добавлю лишь, что это не мое мнение.
И даже не предмет обсуждения.

Netspirit писал(а):
"Не работает в консоли" хуже, чем "работает, но в параллельном потоке"

Ключевое слово - "работает".
Если говорить об изменении в элементе, то работоспособность некой одной схемы - вообще надо засунуть куда подальше.
И в топике говорилось не о неработоспособности конкретной схемы, а о неработоспособности MailSlot в консольном приложении.
А по результатам теста можно лишь заключить о: "возможно заработает".
И не более.
А сослагательное наклонение, по определению - ХУЖЕ.
Было бы лучше, сразу бы выкинули событие на улицу, безо всякого Synchronize.
Типа - "у юзера голова большая, пусть думает. Если чего - пусть на форум обращается, там помогут".

Не подумайте, что я вообще против асинхронной работы.
Есть необходимость - надо работать. С другим уровнем знаний, правда.
Но мне нужно предъявить эту необходимость.
И первое, что я и спросил - нафига консоль. А Вас, Netspirit, этот вопрос вообще не взволновал.
Разницу в концепциях ощущаете

Netspirit писал(а):
ему объяснят про потоки, предложат решение

Как же, плавали - знаем.
Приходит юзер, и спрашивает "у меня схема из 2000 элементов, раз в два дня падает. Раньше реже падала... Чего делать?"
Можно еще добавить, что пока была размером с Ваш тест - вообще не падала.
Типа " Работает - и точка."

Не приведете ссылочку на полезный совет по такой проблеме
карма: 9

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)