Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Как при событии ЭТО СПАМ - ОТПРАВЬТЕ ЖАЛОБУ (синий квадрат) сделать параллельные вычисления массивов (а точнее процедур, которые выполняют вычисление этих массивов), скажем, А и В. И увеличиться ли от этого скорость, в сравнении, если б ети массивы считались последовательно? Желательно с примерчиками. Procedure MasA(N: word; A: array of byte); Procedure MasB(N: word; B: array of byte);
_________________ Лучшая зашита - это нападение.
Последний раз редактировалось Halfback 08.10.2004 15:25, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
Halfback Лучше проведи оптимизацию по памяти. Если нет зависимости по адресам при расчете A и B, то на шину смогут уходить по две команды. Паралелизация (через потоки) ничего не даст, даже на двукамневой тачке.
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
Halfback 0. Разворачивай циклы. Для дельфей оптимально 8-и кратный разворот (камень - Celeron PIII Tualatin) 1. По чтению 1.1. Всегда вычитывай данные соответствующие размеру кэш-линии 1.2. Не используй "завязки" по адресам (a := B[1]; a2 := B[a]) 1.3. Старайся не использовать данные (записи) размером больше страницы 4k 1.4. Выравнивай структуры на 4 байта 1.5. Старайся использовать линейное чтение 2. По записи 2.1. Не используй "завязки" по адресам 2.2. Используй линейную запись 2.3. Опять же, не забывай про выравнивание и размер страницы.
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Скажем имеется процедура:
Код:
procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin Button1.Caption:= 'Pause'; for i:=1 to N do ListBox1.Items.Add( FloatToStr(i) ); Button1.Caption:= 'RUN'; end;
Так вот как сделать так, чтоб при нажатии кнопки Button1 цикл остановился, а при повторном нажатии - придолжился.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Однозначного ответа нет, каждый может реализовать этот вариант по своему. В цикле тебе надо использовать Application.ProcessMessages; и также имет пару глобальных переменных , указывающий в каком состоянии сейчас цикл, запущен , в режиме паузы или просто стоит. Так же надо иметь в виду, если у тебя на форме еще куча контролов так они тоже будут активны и смогут выполнять свою функцию, поэтому надо следить самому чтобы не напортачить. А в просто варианте это можно сделать так. Вот пример На форме ListBox, Button, Label
type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } CurState:longint; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin CurState:=0; end;
procedure TForm1.Button1Click(Sender: TObject); var i:longint; begin if CurState=2 then begin CurState:=1; //set to Run Button1.Caption:='Pause'; exit; end else if CurState=1 then begin CurState:=2; //set to Pause Button1.Caption:='Resume'; exit;// if we already run it end else if CurState=0 then begin CurState:=1;//Run state Button1.Caption:='Pause'; end;
for i:=0 to 1000000 do begin ListBox1.Items.Add(inttostr(i)); Application.ProcessMessages; Label1.Caption:=inttostr(i); while CurState=2 do Application.ProcessMessages; //in pause mode end; CurState:=0; Button1.Caption:='Run'; end;
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
У меня еще пара вопросов: 1. Что надо прописать, чтобы юзер не мог менять размеры формы? (Т.е. чтоб размеры формы были жестко зафиксированны). 2. Касается TChart. Там можно для отображения графика применить св-во Page, установив при этом число точек отображаемых на графике. Если, например, точек=50 а на одну Page задали 10 то Page:=5. С этим все понятно. Но можно также подключить Scroll для плавной прокрутки значений графика. Так вот как подключить Scroll? Все перепробовал - ничего не получается. Помогите! Мне очень надо!
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Ray Adams
Цитата:
1. Делать окно диалоговым
Действительно!
Цитата:
Сам TChar имеет прокрутку. Нажми правой клавишей мыши и тащу куда надо.
Да так то оно так. Но у меня функция (а точнее набор видеоимпульсов) ограничен. А если водить мышью с зажатой правой кнопкой, то когда импульсы закончастся - "эффект скролинга" не прекратиться. Т.е. мне нужен скролинг только в пределах моего графика не более и не менее. Может прикрутить к Chart компонент ScrollBar и задать пределы?
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Почему asm в Delphi такой кривой. Ну то уже дело такое.
Никто не скажет как избежать ошибок, которые провоцирует использование cpuid инструкции?
Есть код - выскакивает ошибка на вполне обыденной прямой как двери строке, комментирую ее, затем выскакивает на абсолютно другой, но то же нормальной строке. Беру раскомментирую строки и комментирую триклятую cpuid и при это ошибок больше нет. Как можно нормально юзать эту инструкцию?
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
Почему asm в Delphi такой кривой.
Это с чего это он кривой то??? Нормальный там asm, просто у него нет поддержки специфичных для процессоров инструкций. Для этого лучше использовать чистый asm
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
Млин!! Задолбался уже...
Вот пишу:
Код:
var p : PAnsiChar; begin StrPCopy(p,''); end;
И при выполнении получаю : Exception class EAcessViolation и т.д.
???
Вроде проще быть не может и пишу вроде все правильно, так в чемже дело???
ЗЫ Запарился уже
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения