| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проектирование приложения |
| Автор: ButtonOFF 1.4.2013, 23:11 |
| Ребята добрый вечер. На повестке дня создать TCP сервер (он же клиент) со своим протоколом передачи информации. С сетевой стороны будут использоваться порты завершения (на край WSAEventSelect). Будут висеть потоки или поток обрабатывающий сокеты (их будет несколько) на входящий данные и подключение клиентов. Проблема сейчас такая, я не хочу использовать потоки обслуживающие сокеты для обращения к базе данных и выполнения каких то вычислительных операций. Чувствую что должен быть какой-то механизм передачи пакета данных (не сетевого, а структуры или хотя бы указателя) другому потоку типа SendMessage только потоку. Конечно можно что-нибудь придумать и это будет работать, но хотелось бы найти иное решение, такое есть? Т.е я хочу повесить всю обработку запросов и отправку данных на другой поток и что бы этот поток извлекал "задачи" из очереди поставленные другим потоком а в свободное время спал. Я склоняюсь к портам ввода/вывода, можно их для этих целей использовать? |
| Автор: k0rvin 2.4.2013, 18:20 |
| У потоков и так разделяемая память, только доступ к ней нужно синхронизировать (или типа того). Вот тут могут быть некоторые полезные подсказки: http://stackoverflow.com/questions/3868403/delphi-threading-which-parts-of-code-need-to-be-protected-synchronized |
| Автор: ButtonOFF 3.4.2013, 23:12 | ||
| Poseidon, ну наример мне нужно наверное потоку для работы с БД отправлять данные типа структуры или буфера, но я от этого варианта наверное откажусь Ну в общем я порылся, есть оказывается ф-ия отправки сообщения потоку. Сейчас схема у меня такая. Поток главного окна создает мой класс сервера. Из него создается 1 поток для прослушки входящих соединений и привязывает новые сокеты к порту завершения, и еще n кол-во = кол-ву процессоров уже рабочие потоки которые читают из порта завершения, потом они так же будут работать с БД поэтому мне кажется что это нормальное решение. Будет наверное еще 1 поток который будет добавлять новые события к порту завершения на выполнение на сокетах (отправку или подключение к другому серверу). Вроде все нормально, есть пока что 1 но. Мне надо писать лог, а запись в файл дорогая операция + если синхронизировать все потоки то выигрыша в скорости не получится никакого, так вот я решил слать сообщения главному окну через
Но при приеме в главном потоке у меня почему-то каша, т.е почти все сообщения перезаписываются другими, т.е вместо 10 разных строк 10 одинаковых пока что на этом этапе застрял. |
| Автор: ButtonOFF 5.4.2013, 12:37 | ||||||
| Народ, кто знает, почему TXMLDocument когда его создаю в памяти указываю версию и кодировку получается без кодировки ? А если сохранить на диск то кодировка появляется. т.е На диске
А в памяти
И кодировка ### нужна, без нее почемуто, при условии что есть русские буквы, не открывается XML в TXMLDocument'е. А сохранять на диск нет возможности.
|
| Автор: Akella 5.4.2013, 13:17 | ||
Никто и ничего не будет за тебя конвертировать. Сам конвертируй. |