Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проектирование приложения 
:(
    Опции темы
ButtonOFF
Дата 1.4.2013, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


улетевший
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Ребята добрый вечер.

На повестке дня создать TCP сервер (он же клиент) со своим протоколом передачи информации. С сетевой стороны будут использоваться порты завершения (на край WSAEventSelect). Будут висеть потоки или поток обрабатывающий сокеты (их будет несколько) на входящий данные и подключение клиентов. Проблема сейчас такая, я не хочу использовать потоки обслуживающие сокеты для обращения к базе данных и выполнения каких то вычислительных операций. Чувствую что должен быть какой-то механизм передачи пакета данных (не сетевого, а структуры или хотя бы указателя) другому потоку типа SendMessage только потоку. Конечно можно что-нибудь придумать и это будет работать, но хотелось бы найти иное решение, такое есть? Т.е я хочу повесить всю обработку запросов и отправку данных на другой поток и что бы этот поток извлекал "задачи" из очереди поставленные другим потоком а в свободное время спал. Я склоняюсь к портам ввода/вывода, можно их для этих целей использовать?
PM MAIL   Вверх
k0rvin
Дата 2.4.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



У потоков и так разделяемая память, только доступ к ней нужно синхронизировать (или типа того). Вот тут могут быть некоторые полезные подсказки: http://stackoverflow.com/questions/3868403...ed-synchronized


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Poseidon
Дата 2.4.2013, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(ButtonOFF @  1.4.2013,  23:11 Найти цитируемый пост)
Чувствую что должен быть какой-то механизм передачи пакета данных (не сетевого, а структуры или хотя бы указателя) другому потоку типа SendMessage только потоку.
А можешь на конкретном примере показать что именно нужно будет передавать между потоками? Как бы вариантов общения потоков между собой не так уж и много, что бы не знать какой выбрать.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ButtonOFF
Дата 3.4.2013, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


улетевший
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Poseidon, ну наример мне нужно наверное потоку для работы с БД отправлять данные типа структуры или буфера, но я от этого варианта наверное откажусь

Ну в общем я порылся, есть оказывается ф-ия отправки сообщения потоку.

Сейчас схема у меня такая.
Поток главного окна создает мой класс сервера. Из него создается 1 поток для прослушки входящих соединений и привязывает новые сокеты к порту завершения, и еще n кол-во = кол-ву процессоров уже рабочие потоки которые читают из порта завершения, потом они так же будут работать с БД поэтому мне кажется что это нормальное решение. Будет наверное еще 1 поток который будет добавлять новые события к порту завершения на выполнение на сокетах (отправку или подключение к другому серверу).
Вроде все нормально, есть пока что 1 но. Мне надо писать лог, а запись в файл дорогая операция + если синхронизировать все потоки то выигрыша в скорости не получится никакого, так вот я решил слать сообщения главному окну через
Код

PostMessage(hwnd, LOG_MSG, String или PChar, (как вариант размер строки))

Но при приеме в главном потоке у меня почему-то каша, т.е почти все сообщения перезаписываются другими, т.е вместо 10 разных строк 10 одинаковых пока что на этом этапе застрял.

PM MAIL   Вверх
ButtonOFF
Дата 5.4.2013, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


улетевший
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Народ, кто знает, почему TXMLDocument когда его создаю в памяти указываю версию и кодировку получается без кодировки ? А если сохранить на диск то кодировка появляется. т.е

На диске

Код

<?xml version="1.0" encoding="windows-1251" ?> 
<query>
</query>


А в памяти

Код

<?xml version="1.0"?> 
<query>
</query>


И кодировка ### нужна, без нее почемуто, при условии что есть русские буквы, не открывается XML в TXMLDocument'е.  smile 
А сохранять на диск нет возможности.

Код

  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.Active := True;
  XMLDoc.Encoding := 'windows-1251';
  XMLDoc.Version := '1.0';
  qNode := XMLDoc.AddChild('query');
  
  XMLDoc.XML.Text = '<?xml version="1.0"?><query></query>';
  XMLDoc.ChildNodes.First.Text = 'version="1.0" encoding="windows-1251"';

smile Клато Верато Никхе-кхе-кхе


Это сообщение отредактировал(а) ButtonOFF - 5.4.2013, 12:46
PM MAIL   Вверх
Akella
Дата 5.4.2013, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ButtonOFF @  5.4.2013,  12:37 Найти цитируемый пост)
Народ, кто знает, почему TXMLDocument когда его создаю в памяти указываю версию и кодировку получается без кодировки ?

Никто и ничего не будет за тебя конвертировать. Сам конвертируй.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1187 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.