Перейти к содержанию
Fire Monkey от А до Я

Камышев Александр

Пользователи
  • Постов

    235
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Сообщения, опубликованные Камышев Александр

  1. Задача поднять старый (теплый ламповый) проект CBuilder 6 под Виндовс в RAD Studio.

    Просто открыл файл проекта, практически все подтянулось с небольшими изменениями в путях include. Кроме TClientSocket, нет такого визуального компонента.

    Компонента нет, но библиотеки в RAD Studio оставили. Подключил #include <ScktComp.hpp>, создал динамически TClientSocket, определил события - проект поднялся малой кровью.

    #include <ScktComp.hpp>
      
    TClientSocket *сlient = new TClientSocket(NULL);
    сlient->OnConnect = ClientConnect;
    сlient->OnDisconnect = ClientDisconnect;
    сlient->OnError = ClientError;
    сlient->OnRead = ClientRead;

    Аналогично можно пользоваться TServerSocket. Может кому пригодится.

  2. 1 час назад, kami сказал:

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

    А вот кроссплатформенный штатный HTTPClient -???

    Сдаюсь, кто их знает чего там в исходниках.

    На винде хэндл закрыть, на unix pthread_cancel выводит из операции ввода-вывода или sleep в pthread.

    TIdHTTP или TNetHTTPclient?

    IdHTTP1->Socket->Close() - не поможет?

  3. 16 часов назад, krapotkin сказал:

    Мне при разработке всегда было приятнее иметь железобетонные технологии, даже если они не самые передовые.

    Так что модель данных это гораздо лучше прямой работы с датасетом

    Это описание Модель-Вид-Контроллер, куда уже передовее... LiveBinding может быть неплох для студентов, но лучше уже сразу по взрослому.

  4. Хотел обновить приложение, Google Play Console выдала, что по новым правилам, раз уж я пользуюсь сервисом dialer, то, следовательно, имею доступ к личным данным. В этой связи нужно уведомить пользователя о моих намерениях, т.е. изложить их в Политике конфиденциальности, выложить документ в общий доступ и дать ссылку на него в Google Play и в меню приложения.

    Вопрос, как по клику вызвать браузер и дать ему ссылку, аналог ShellExecute в виндовс?

  5. Как все запущено... deploy означает разместить на мобильном устройстве, изменения будут в файле на телефоне или планшете.

    Посмотреть изменения можно или из программы, запросить 'select * from Tab_Parol', либо любой прогой из googleplay которая работает с sqlite.

    Хотя нет, internal сторонними программами не посмотришь, надо из своей контролить.

  6. Визуальные компоненты портят начинающих программеров...

    Query_Parol - это что? DBTable? Тексты запросов в студию.

    и транслитерация - плохой тон, почему бы не tbPassword?

  7. Как подключить #include "boost/unordered_map.hpp"?

    В примерах Samples\CPP\RTL\BoostArchiveDemo\ есть #include "boost/archive/text_iarchive.hpp".

    Однако: 

    "[bccaarm Fatal Error] Unit1.cpp(40): 'boost/archive/text_iarchive.hpp' file not found" под андроид;

    "[bcc32 Error] Unit1.cpp(40): E2209 Unable to open include file 'boost/archive/text_iarchive.hpp'" под виндовс.

    Ну и вдогонку, какой стандарт С++ поддерживают компиляторы RAD Studio Seattle, Berlin.

  8. 13 часа назад, Alex7wrt сказал:

    Спасибо. А где можно почитать, как его использовать?

    это и есть одна из реализаций пула потоков, смысл не создавать и уничтожать под каждую задачу поток, сразу создать несколько и использовать их многократно.

  9. имхо, с firemonkey неплохо работает такая схема:

    1. создать две потокозащищенные очереди (структуры), на си для этого подходит std::deque, в fmx можно TList. Защита стандартно TCriticalSection;

    2. создать несколько потоков, с помощью TEvent указать им ссылки на очереди и критические секции;

    3. в потоках:

     3.1 TCriticalSection::Enter лочим очередь задач,

     3.2 забираем крайнюю задачу

     3.3 TCriticalSection::Leave отпускаем очередь задач

     3.4 вычисления

     3.5 по аналогии с очередью задач лочим очередь результатов, выкладываем результаты, отпускаем

     3.6 повтор с пункта 3.1

    4. в основном потоке в очереди (тоже lock unlock) выкладывать задачи и при наличии результатов отрисовывать имеющимися средствами.

    в 4 пункте нужен будет нужен будет какой-нибудь mmtimer.

     

  10. 18 часов назад, kami сказал:

    а это не дедлок. Это, грубо говоря,

    
    while true do sleep(maxint);

    т.е просто засыпаем текущий поток, не влияя при этом на остальные.

    Дедлок - это когда один поток ждет реакции от другого потока, который ждет реакции от первого потока. Возможно - даже через третьи, четвертые... руки. Получается кольцо ожидания. В приведенном примере никакой зависимости от другого потока, у которого зависимость от этого потока - нет.

    while(1) Sleep(INT_MAX) 

    - это грубо, но можно еще брутальней:

    while(1){}

     если так принципиально, для успокоения, можно создать еще поток, передать ему ссылку на event, добавить код 

    event->SetEvent()

    и не запуская на выполнение уйти в WaitFor, тогда все в порядке: два потока, оба ждут.

  11. 19 часов назад, kami сказал:

    В пределах одного потока можно хоть MaxInt раз входить в критическую секцию, ничего от этого не замерзнет.

    мдя согласен, счетчик только увеличивается

    тогда еще проще:

    TSimpleEvent *event = new TSimpleEvent(NULL);
    event->WaitFor( INFINITE );

    замри :)

  12. В 23.03.2017 в 18:37, ENRGY сказал:

    MacOS (OSX), Android и iOS - это тоже Unix.  

    Unix то да, только до сих пор это были java приложения для виртуальной машины, теперь можно создавать исполняемые ELF файлы консольных приложений и библиотеки под unix.

     

    В 23.03.2017 в 18:37, ENRGY сказал:

    Что-то не пойму причем здесь Apache к Delphi? И зачем его привязывать?

    выше было видео, создание Apache dynamic link module, вот здесь c 45 минуты:

    В 20.03.2017 в 17:11, Kitty сказал:

     

  13. The RAD Studio IDE now includes its first LLVM based Linux compiler for Enterprise development, enabling Delphi developers to target 64-bit Intel Linux servers and devices. The Linux compiler is certified for Ubuntu Server (LTS 16.04) and RedHat Enterprise (V7) and is built on top of the LLVM engine

    Они что, правда сделали компилятор под unix исходников на паскале? Или еще один переход си <-> паскаль?

    Насколько мне известно, модули для apache до сих пор собирали и устанавливали с помощью apxs / apxs2, apxs в свою очередь работает с исходниками на Си, объектными файлами *.o и статическими библиотеками *.a. И как все это хозяйство привязали к паскалю?

    Что-то, воля ваша, недоброе таится© в написании кода на си, который использует компоненты написанные на паскале, которые собираются компилятором(написанным видимо на си) в объектники и библиотеки, которые затем будут собраны в модули для демона написанного на си..., доколе?

    При этом, нет поддержки линукс-сервер для borland си... все, абзац.

  14. 1 час назад, ENRGY сказал:

    Полная  ерунда. Хоть на китайском можно писать. Сохраняйте .pas в utf-8 - правая кнопка мыши по редактору > File Format > Utf-8.

    Полная ерунда - весомый довод... Сохранить то utf-8 можно, компилер среды BCCAARM.EXE, the C++ Compiler for Android все равно будет с ними работать как с asci, и также не поймет кириллицу, если ему, как писали выше, если не указать принудительно.

    А вот BCC32, the C++ Command-Line Compiler все считает корректно.

  15. 53 минуты назад, ENRGY сказал:

    Причем здесь юникод к RTTI? RTTI это низкоуровневый доступ к полям класса. К любым типам.

    Сохраняйте строки в отдельном текстовом файле в Utf-8 и забрасывайте их в компоненты при помощи RTTI. http://delphi.chertenok.ru/text/stat21.shtml

    Это все делает TLang стандартный, зачем переписывать доступные стандартные компоненты?

     

  16. 1 час назад, ENRGY сказал:

    Имхо лучше свой вариант написать на файлах и RTTI. Потом вам захочется iOS и все равно придется делать. 

    Если строки в языковых файлах - зачем RTTI, что к чему безопасно runtime приводить?

    Почему бы Embarcadero не работать сразу с unicode, стандартно UTF-8(16)? 

    RAD Studio работает с исходниками на Ansi, а компилятор не распознает кириллицу в этих исходных файлах, приведение:

    case 0: return (AnsiString)"Ожидание";

    сделано как попытка объяснить компилятору, что это кириллица.

    Правильный подход (имхо опять же) - среде нужно сразу работать с unicode, и не извращаться потом с приведением типов.

  17. 18 часов назад, chaplin.u@gmail.com сказал:

    попробовал этот пример но столкнулся с проблемой кодировки в Андроид. подставляю в ShowMessage(LangString(0, Lang)); 

    Вариант -  

    выдаёт на экране строку вопросительных знаков.

    Вариант -     case 0: return AnsiToUtf8("Ожидание"); выдаёт ромбики. 

    как я вижу   ShowMessage(const System::UnicodeString AMessage);  работает с UnicodeString  а Андроид хочет Utf8.

    попробовал ShowMessage( AnsiToUtf8(LangString(0, Lang))); 

    не помогает...

     

     

    На Seattle это работает, не знаю уж как там преобразование в Android API, в Berlin уже нет. Приложение под Андроид оставил в Seattle и больше не заморачивался пока.

    Сейчас пишу демон TCP сервера на с++ под CentOs в среде NetBeans, там строки языка Ansi С и стандартные строки std::string из C++. Отображение строк только в логах либо в браузере и проблем с кириллицей нет.

  18. 22 часа назад, Mazzay сказал:

    У меня прекрасно работает. Что я делаю не так?

    Некорректно выразился, на андроид не работает связка FireDac + MySQL, т.к. используется libmysql.dll, с sqLite все вроде ок.

  19. статистика:

    запросов задач в сек. 3000
    подтверждений в сек. 0
    параметры файлов в сек. 0
    запросов данных в сек. 0
    запросов клиента в сек. 0
    время запроса, мсек. 156
    активных соединений с бд 10 из 10
    запросов в бд в сек. 3000
    размер очереди в бд 1365 из 5000
    время запроса к бд, мсек. 31
    устройства 2490
    профили 139
    задачи 51
    файлов доступно 11
    db_client 0 запросов в сек. 300
    db_client 1 запросов в сек. 302
    db_client 2 запросов в сек. 300
    db_client 3 запросов в сек. 300
    db_client 4 запросов в сек. 301
    db_client 5 запросов в сек. 300
    db_client 6 запросов в сек. 300
    db_client 7 запросов в сек. 298
    db_client 8 запросов в сек. 299
    db_client 9 запросов в сек. 300

×
×
  • Создать...