От TCP сервера получаем для обработки сообщения. Поступают они в произвольном, по времени порядке.
Есть схема обработки принятых сообщений. Время обработки может быть как незначительным, так и значительным (за это время могут прийти ещё сообщения). После обработки, схема может отослать результаты через тот-же сервер.
Вопрос: как правильно развязать события приёма, обработки и отсылки - в каком месте поставить элемент Thread?
code_1577.txt
зы: другие варианты (отличные от моей схемы) тоже принимаются к рассмотрению
Этот топик читают: Гость
Ответов: 3851
Рейтинг: 159
|
|||
карма: 0 |
| ||
файлы: 1 | code_1577.txt [1.1KB] [229] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Андрей., прежде, чем вставлять элемент нужно решить для себя следующие задачи:
1) Делать один поток обработки и хранить все прочие данные в буфере 2) Делать по потоку на все пришедшие данные 3) Делать комбинированный метод из пунктов 1 и 2. |
|||
карма: 27 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Dilma, наверное всё таки 1, т.к. последовательность сообщений имеет значение. В моей схеме буфер это StrList - там (по идее) накапливаются сообщения. Вот тоже вопрос, кстати - что будет, если схема будет обращаться к этому StrList (читать очередное сообщение или удалять из списка уже обработанное), а в это время придёт сообщение и сервер будет пытаться его добавить в список StrList?
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Поток лучше запускать отдельно и в нем проверять, а есть ли в буфере данные. Если есть, то начинать их обработку, иначе спать сколько-то времени.
Защита доступа осуществляется через вставку Mutex или событий(Event) |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Dilma писал(а): Защита доступа осуществляется через вставку Mutex или событий(Event)за язык тебя никто не тянул, между прочим - сейчас объяснять будешь всю теорию многопоточных защит |
|||
карма: 9 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Galkov писал(а): сейчас объяснять будешь Dilma писал(а): Защита доступа осуществляется через вставку Mutex или событий(Event)как это сделать? |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Можно подумать, что элемент Thread тебе проц разгрузит
|
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Андрей. писал(а): От TCP сервера получаем для обработки сообщения. Поступают они в произвольном, по времени порядке.
Есть схема обработки принятых сообщений. Время обработки может быть как незначительным, так и значительным (за это время могут прийти ещё сообщения). После обработки, схема может отослать результаты через тот-же сервер. Как я понял, пишем троян со связью через IRC |
|||
карма: 1 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Galkov писал(а): Можно подумать, что элемент Thread тебе проц разгрузит tsdima писал(а): Как я понял, пишем троян со связью через IRC |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
code_1578.txt
Этот пример показывает, как организовать в потоке ожидание по событию. Для защиты доступа к объекту нужно делать так: 1) Держать событие по умолчанию сброшенным(doReset) 2) Если кому-то нужно получить доступ, то делаем doWait 3) как только происходит onWait устанавливаем событие(doSet) 4) выполняем работу 5) сбрасываем событие |
|||
карма: 27 |
| ||
файлы: 1 | code_1578.txt [578B] [379] |
Ответов: 9906
Рейтинг: 351
|
|||
Андрей. писал(а): Просто есть подозрение, что происходит совместный доступ к StrList "Кольцеваниями" сначала надо прекратить заниматься, а потом о подозрениях говорить. Тем более, что в одном потоке не может быть "совместного доступа" даже в теории |
|||
карма: 9 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Dilma писал(а): 1) Держать событие по умолчанию сброшенным(doReset)
2) Если кому-то нужно получить доступ, то делаем doWait 3) как только происходит onWait устанавливаем событие(doSet) У меня в этой схеме onWait не происходит пока я не установлю событие... |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Прошу прощения, наоборот конечно же. WaitObject ждет когда событие установлено и не ждет когда оно сброшено.
|
|||
карма: 27 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Galkov писал(а): "Кольцеваниями" сначала надо прекратить заниматьсяВот так code_1580.txt попробовал, вроде без кольцевания, но всё равно грузит проц (иногда). |
|||
карма: 0 |
| ||
файлы: 1 | code_1580.txt [1.6KB] [262] |
Ответов: 9906
Рейтинг: 351
|
|||
Андрей. писал(а): Вот так code_1580.txt попробовал, вроде без кольцеванияНе правда ваша, дяденька - чистое "кольцевание" |
|||
карма: 9 |
|