Вверх ↑
Этот топик читают: Гость
Ответов: 3851
Рейтинг: 159
#1: 2007-06-19 11:28:27 ЛС | профиль | цитата
От TCP сервера получаем для обработки сообщения. Поступают они в произвольном, по времени порядке.
Есть схема обработки принятых сообщений. Время обработки может быть как незначительным, так и значительным (за это время могут прийти ещё сообщения). После обработки, схема может отослать результаты через тот-же сервер.
Вопрос: как правильно развязать события приёма, обработки и отсылки - в каком месте поставить элемент Thread?

code_1577.txt

зы: другие варианты (отличные от моей схемы) тоже принимаются к рассмотрению
карма: 0
начавший
0
файлы: 1code_1577.txt [1.1KB] [229]
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2007-06-19 11:52:43 ЛС | профиль | цитата
Андрей., прежде, чем вставлять элемент нужно решить для себя следующие задачи:
1) Делать один поток обработки и хранить все прочие данные в буфере
2) Делать по потоку на все пришедшие данные
3) Делать комбинированный метод из пунктов 1 и 2.
карма: 27
0
Ответов: 3851
Рейтинг: 159
#3: 2007-06-19 13:23:42 ЛС | профиль | цитата
Dilma, наверное всё таки 1, т.к. последовательность сообщений имеет значение. В моей схеме буфер это StrList - там (по идее) накапливаются сообщения. Вот тоже вопрос, кстати - что будет, если схема будет обращаться к этому StrList (читать очередное сообщение или удалять из списка уже обработанное), а в это время придёт сообщение и сервер будет пытаться его добавить в список StrList?
карма: 0
начавший
0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2007-06-19 13:30:35 ЛС | профиль | цитата
Поток лучше запускать отдельно и в нем проверять, а есть ли в буфере данные. Если есть, то начинать их обработку, иначе спать сколько-то времени.

Защита доступа осуществляется через вставку Mutex или событий(Event)
карма: 27
0
Ответов: 9906
Рейтинг: 351
#5: 2007-06-19 13:38:44 ЛС | профиль | цитата
Dilma писал(а):
Защита доступа осуществляется через вставку Mutex или событий(Event)

за язык тебя никто не тянул, между прочим - сейчас объяснять будешь всю теорию многопоточных защит
карма: 9

0
Ответов: 3851
Рейтинг: 159
#6: 2007-06-19 13:54:48 ЛС | профиль | цитата
Galkov писал(а):
сейчас объяснять будешь
тебе смешно, а у меня проц грузится на 98%

Dilma писал(а):
Защита доступа осуществляется через вставку Mutex или событий(Event)

как это сделать?
карма: 0
начавший
0
Ответов: 9906
Рейтинг: 351
#7: 2007-06-19 14:03:22 ЛС | профиль | цитата
Можно подумать, что элемент Thread тебе проц разгрузит
карма: 9

0
Ответов: 2125
Рейтинг: 159
#8: 2007-06-19 14:11:22 ЛС | профиль | цитата
Андрей. писал(а):
От TCP сервера получаем для обработки сообщения. Поступают они в произвольном, по времени порядке.
Есть схема обработки принятых сообщений. Время обработки может быть как незначительным, так и значительным (за это время могут прийти ещё сообщения). После обработки, схема может отослать результаты через тот-же сервер.

Как я понял, пишем троян со связью через IRC
карма: 1

0
Ответов: 3851
Рейтинг: 159
#9: 2007-06-19 14:19:02 ЛС | профиль | цитата
Galkov писал(а):
Можно подумать, что элемент Thread тебе проц разгрузит
Незнаю конечно. Просто есть подозрение, что происходит совместный доступ к StrList - я пытаюсь удалить строчку, а сервер пытается добавить новую...

tsdima писал(а):
Как я понял, пишем троян со связью через IRC
Пишем прокси управляемый по сети (вкл/выкл, список юзеров и т.д.)
карма: 0
начавший
0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2007-06-19 14:43:26 ЛС | профиль | цитата
code_1578.txt

Этот пример показывает, как организовать в потоке ожидание по событию. Для защиты доступа к объекту нужно делать так:
1) Держать событие по умолчанию сброшенным(doReset)
2) Если кому-то нужно получить доступ, то делаем doWait
3) как только происходит onWait устанавливаем событие(doSet)
4) выполняем работу
5) сбрасываем событие
карма: 27
0
файлы: 1code_1578.txt [578B] [379]
Ответов: 9906
Рейтинг: 351
#11: 2007-06-19 14:50:52 ЛС | профиль | цитата
Андрей. писал(а):
Просто есть подозрение, что происходит совместный доступ к StrList

"Кольцеваниями" сначала надо прекратить заниматься, а потом о подозрениях говорить.
Тем более, что в одном потоке не может быть "совместного доступа" даже в теории
карма: 9

0
Ответов: 3851
Рейтинг: 159
#12: 2007-06-19 16:16:56 ЛС | профиль | цитата
Dilma писал(а):
1) Держать событие по умолчанию сброшенным(doReset)
2) Если кому-то нужно получить доступ, то делаем doWait
3) как только происходит onWait устанавливаем событие(doSet)

У меня в этой схеме onWait не происходит пока я не установлю событие...
карма: 0
начавший
0
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2007-06-19 16:32:51 ЛС | профиль | цитата
Прошу прощения, наоборот конечно же. WaitObject ждет когда событие установлено и не ждет когда оно сброшено.
карма: 27
0
Ответов: 3851
Рейтинг: 159
#14: 2007-06-19 16:35:48 ЛС | профиль | цитата
Galkov писал(а):
"Кольцеваниями" сначала надо прекратить заниматься

Вот так code_1580.txt попробовал, вроде без кольцевания, но всё равно грузит проц (иногда).
карма: 0
начавший
0
файлы: 1code_1580.txt [1.6KB] [262]
Ответов: 9906
Рейтинг: 351
#15: 2007-06-19 16:56:44 ЛС | профиль | цитата
Андрей. писал(а):
Вот так code_1580.txt попробовал, вроде без кольцевания

Не правда ваша, дяденька - чистое "кольцевание"
карма: 9

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