| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > DLL на Delphi Embarcadero, IIS, многопоточность, р |
| Автор: forSale 20.4.2014, 08:41 | ||
Есть код:
Есть биллинговый проект. Он рабочий. Появилась необходимость создать веб-сервис для предоставления суммы к оплате за газ в ответ на запрос с передачей лицевого счета и текущего показания счетчика. Чтобы не изобретать велосипед, было решено взять готовый модуль проекта, отвечающий за расчеты и создать на его основе DLL для веб-сервера. Проведено тестирование сервиса: поочередно серверу передаются заранее заготовленные лицевые счета и показания, ответ выводится в МЕМО на клиенте. Это работает нормально, когда только один клиент обращается. Программа клиента была скопирована и запущена параллельно. Таким образом два клиента одновременно работают. У них 2 разных списка с лицевыми и показаниями. Обе программы работают какое-то время, потом появляется ошибка: List index out of bounds(). Порывшись в интернете обнаружил, что IIS работает в несколько потоков. А это чревато при работе с TList, который не потокобезопасен. При попытке перейти на TThreadList наткнулся на такую проблему: список на основе TList объявляется как: var переменная: TList<какой-то класс>; такая конструкция по-видимому TThreadList не поддерживается. Долго не заморочиваясь, решил создавать потоки прямо внутри удаленно вызываемой функции GetBill. Но тут наткнулся на проблему синхронизации. Бывает так, что запросы к серверу поступают одновременно и результат второго по очереди запроса попадает к первому. Не удается организовать работу потоков. Что-то я делаю не так, возможно вообще в корне неверное, но не пойму как по-другому работать с потоками. |
| Автор: Romikgy 20.4.2014, 21:33 |
| ну так почитайте как правильно работать с многопоточностью в дельфи |
| Автор: Romikgy 22.4.2014, 10:32 |
| нет , не легче... легче один раз самому разобраться , чем потом каждый раз спрашивать |