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

antigrav

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

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

  • Посещение

Достижения antigrav

  1. Здравствуйте! Пишу алгоритм с параллельными вычислениями. Один из объектов является разделяемым ресурсом и хотелось бы его клонировать. Объект достаточно сложный и использует другие объекты. Возникла идея применения механизма сериализации/десериализации. Примерный код ниже. function Cloning(RootObject: TComponent): TComponent; var MemStream: TMemoryStream; begin MemStream := TMemoryStream.Create; try MemStream.WriteComponent(RootObject); MemStream.Position := 0; Result := MemStream.ReadComponent(RootObject); finally MemStream.Free; end; end; Данный код, однако, не дает нужного результата. Исходный компонент RootObject и Result, в итоге, ссылаются на одну и ту же область памяти. Может ли уважаемое сообщество предложить какие-то решения?
  2. Снимаю предыдущий вопрос. Можно проверить через обращение к MainThreadID.
  3. Правильно ли я понимаю, что номер, который печатался в опубликованном фрагменте кода - это номер главного потока?
  4. Да, после выноса TThread.CurrentThread.ThreadID.ToString выше Synchronize(), получил разные номера потоков. Спасибо!
  5. Здравствуйте! Имею следующий фрагмент кода: fines: array of Extended; TParallel.For(0, Pred(count), procedure(index: Integer) begin fines[index] := CalculateFine(Index); TThread.Synchronize(nil, procedure begin Memo.Lines.Add('ThreadID = ' + TThread.CurrentThread.ThreadID.ToString); end); end); В логе получаю один и тот же номер ThreadID для всех значений index. Разве не должны быть созданы count потоков, каждый со своим ID?
  6. Вы имеете ввиду в режиме синхронизации пересылать в лог главного потока данные из дополнительного с указанием номера дополнительного потока?
  7. Кто-нибудь юзал такую штуку: "параллельный отладчик Parnassus"? Если да, то какое мнение? И можно ли его получить и установить не имея активной подписки на обновления?
  8. antigrav

    TScrollBar

    Вижу, что посты от 15-го года. Мне понадобился целочисленный TScrollBar сейчас и именно в FMX. Похоже, ничего не изменилось. Ползунок меняет значение не на целую величину, а на дробную. Нужно писать своего потомка для компонента или кто-нибудь знает более простое решение?
  9. antigrav

    Тест глубины

    Здравствуйте! В OpenGL и DirectX есть возможность при работе с буфером глубины (z-буфер) выбирать различные варианты приоритета для конфликтующих пикселей, то есть таких, которые находятся в сцене на одинаковом расстоянии от наблюдателя. В OpenGL, например, использовалась команда glDepthFunc(GLenum func), в которую можно было передать константу для выбора одного из двух соперничающих пикселей. Имеется ли подобная команда в FMX?
  10. Спасибо, OnePeople и krapotkin! С Application.ProcessMessages в главном потоке оба потока работают одинаково, что и требовалось.
  11. Приложу, на всякий случай, проект Project1.zip
  12. То есть внутри цикла ProgressBar1 не перерисовывается.
  13. Я про этот код. Главный поток. procedure TForm1.Button1Click(Sender: TObject); begin Test; end; procedure TForm1.Test; const n = 200; var I: Integer; begin ProgressBar1.Min := 0; ProgressBar1.Max := n - 1; for I := 0 to n - 1 do begin ProgressBar1.Value := I; sleep(10); end; end; Я нажимаю кнопку и ожидаю, что после ее нажатия ProgressBar1 постепенно, в цикле, будет заполняться. Но этого не происходит. После нажатия я вижу пустой ProgressBar1 и только спустя время 10*200, в конце цикла, вижу уже заполненный ProgressBar1. Постепенного заполнения ProgressBar не происходит. Такой же процесс в дополнительном потоке, однако, работает корректно. Точнее, так как мне нужно.
×
×
  • Создать...