Maximus
Пользователи-
Постов
84 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Весь контент Maximus
-
Поиск рулит
-
Это что-то ещё хуже. При первом запуске студия даже скомпилить не дала, ссылаясь на эти ошибки. После перезапуска студии - скомпилилось, но ошибки остались.
-
Сырая как обычно. Вот как они тестировали?
-
Не подойдёт? http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Graphics.TBitmap.FlipHorizontal
-
https://www.embarcadero.com/ru/products/delphi/product-editions
-
windows Развертывание приложения с FireDAC и SQLite
Maximus ответил Вадим Смоленский вопрос в SQLite
Сделайте тестовое приложение, без функционала, только подключение к базе с одной таблицей и выводом данных из неё. Если она у ваших тестеров заработает, значит косяк в вашем приложении. Если не заработает, то скините проект сюда. -
windows Развертывание приложения с FireDAC и SQLite
Maximus ответил Вадим Смоленский вопрос в SQLite
Чистая ХР, откуда там взяться этой библиотеке? Она не поставлялась вместе с виндой. Проверил, её там действительно нет. -
windows Развертывание приложения с FireDAC и SQLite
Maximus ответил Вадим Смоленский вопрос в SQLite
А откуда вообще взялась информация о том, что для работы приложения необходимо с ним таскать библиотеку sqlite? Беру чистый образ Win XP, на нём не должно быть этой библиотеки, кидаю туда своё приложение, работающее с sqlite через FireDAC, и всё работает. Что я делаю не так? -
Разница в вызовах Synchronize
Maximus ответил Winexcel вопрос в Вопросы по языку Object Pascal и RTL
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.TThread.Synchronize Судя по документации, если передать первым параметром поток, то в дальнейшем в основном потоке можно будет определить какой из дополнительных потоков вызвал метод. Если это не требуется, то можно ничего не передавать. -
Активно использую Post с двумя параметрами: адрес и список параметров. На стороне скрипта специально useragent не проверял, но по логам он всегда присутствует и никаких проблем с ним нет.
-
Прям немедленно остановить нельзя, но можно вызвать метод Cancel var Task : ITask; ... Task := TTask.Run(...); ... Task.Cancel; //когда нужно остановить А внутри таска сделать проверки, что если выполняется Task.Status = TTaskStatus.Canceled то не нужно обновлять данные, там где вы их обновляете и досрочно закончить работу кода таска.
-
Смотря к каким данным вы обращаетесь. На самом деле синхронизировать нужно любые обращения к разделяемым ресурсам. Если теми данными, что на форме или где-то ещё, пользуется другой поток, то доступ к ним должен быть синхронизирован. Если вы их только читаете, измениться они не могут и делаете это только в показанном потоке, то можно не синхронизировать Но вот это же точно визуальный элемент? Form1.ConnectImage.Bitmap := Form1.IconList.Bitmap(Size, localicon); Тогда это уже менее страшно, я почему-то подумал, что обращение идёт через HTTP. TCPClient не имеет такой возможности, только самостоятельно потоки делать.
-
На первый взгляд можно заметить следующее: 1. Обращение к форме из потока без синхронизации l := Length(Form1.RoomElements); E := Form1.RoomElements[j]; Так делать нельзя. SendHTTPMessage - тоже самое. 2. Таймер не останавливается на время работы потока, судя по всему. Если поток не успеет отработать за секунду, как вы написали, может запуститься второй и третий. Возможно так и задумано, но если учесть, что все они обращаются к форме без синхронизации всё это печально кончится. 3. У вас сколько объектов по которому цикл проходит каждую секунду? И для каждого объекта вызывается Get запрос на веб сервер? Бедный сервер. Данные нужно получать сразу для всех объектов, и уже в клиенте разбирать, что вам нужно, а что нет. А иначе ваши клиенты положат вам ваш же сервер рано или поздно. 4. Уже несколько версий существует TNetHttpClient и THTTPClient, которые могут асинхронно отправлять запросы на веб сервер, а значит поток вообще создавать не нужно.
-
На самом деле это поведение можно достаточно просто отключить var Connect : TFDConnection; Query : TFDQuery; ... Connect.ResourceOptions.SilentMode := true; Query.ResourceOptions.SilentMode := true; ...