Member
Статус: Не в сети Регистрация: 25.01.2008 Откуда: СПб
SwiPTorrent Напиши свой компонент
Кто нибудь может объяснить аномальное поведение переменных типа Single в Delphi #77
Если эту переменную объявить как Real, то все впорядке, но OpenGL работает с Glfloat, аналогами которых в Delphi является Single. Цифр 149 вообще быть не должно, т.к. там всего 7-8 значящих цифр. #77 И тем не менее они выводятся даже при печати.
Member
Статус: Не в сети Регистрация: 17.02.2009 Откуда: Россия, Пермь
Ребят помогите поменять приоритет у потока, вот формулировка задачи При нажатии кнопки [Запустить] создается три потока, каждый из которых выводит на форму окружность определенного цвета в произвольной точке экрана. Приоритет потока возможно изменить динамически. Нажатие на кнопку [Остановить] завершает все потоки.
На форме как уже ясно есть кнопки старт,стоп и 2 комбобокса, в одном из них выбираем поток, а в другом задаем приоритет. Так вот к чему я пришел на данный момент
Код:
procedure TForm1.ComboBox1Click(Sender: TObject); begin If ComboBox1.ItemIndex=0 then TPaintThreadYellow.Create (True); If ComboBox1.ItemIndex=1 then TPaintThreadRed.Create (True); If Combobox1.ItemIndex=2 then TPaintThreadBlue.Create (True); end;
procedure TForm1.ComboBox2Click(Sender: TObject); begin If ComboBox2.ItemIndex=0 then .priority := (tpLower); If ComboBox2.ItemIndex=1 then .Priority := (tpNormal); If Combobox2.ItemIndex=2 then .Priority := (tpHigher);
_________________ СЧАСТЬЕ ДЛЯ ВСЕХ, ДАРОМ, И ПУСТЬ НИКТО НЕ УЙДЁТ ОБИЖЕННЫЙ!(c)Стругацкие Пикник на обочине
Member
Статус: Не в сети Регистрация: 25.01.2008 Откуда: СПб
Varabaiba Создай массив указателей на созданные объекты типа TThread. Так как твой потоки TPaintThreadYellow, TPaintThreadRed, TPaintThreadBlue - потомки TThread ошибки не будет. Через них меняй приоритет потомков.
Код:
var A: array [0..2] of TThread; begin //Создаем потоки A[0] := TPaintThreadYellow.Create(false); A[1] := TPaintThreadRed.Create(false); A[2] := TPaintThreadBlue.Create(false); //Меняем приоритет A[0].Priority := tpNormal; A[1].Priority := tpHigher; A[2].Priority := tpLower; end;
Если в конструкторе Create потока аргумент CreateSuspended: boolean ставить True (как у тебя), то поток будет создан прерванным и для его запуска надо выполнить например A[0].Resume. И не забывай, про метод Synchronize. По другому к компонентам из потоков обращаться нельзя.
Код:
{ Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TMyThread1.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; }
как это увязать с несколькими потоками и комбобоксом?была мысль сделать так
Код:
procedure TForm1.ComboBox1Click(Sender: TObject); begin If ComboBox1.ItemIndex=0 then A[0].Create (True) and i:=0; If ComboBox1.ItemIndex=1 then A[1].Create (True) and i:=1; If Combobox1.ItemIndex=2 then A[2].Create (True) and i:=2; end;
procedure TForm1.ComboBox2Click(Sender: TObject); begin If ComboBox2.ItemIndex=0 then A[i].priority := (tpLower); If ComboBox2.ItemIndex=1 then A[i].Priority := (tpNormal); If Combobox2.ItemIndex=2 then A[i].Priority := (tpHigher);
Но не заработало...А про синхронизацию вообще впервые слышу нам на паре ничего не сказали
_________________ СЧАСТЬЕ ДЛЯ ВСЕХ, ДАРОМ, И ПУСТЬ НИКТО НЕ УЙДЁТ ОБИЖЕННЫЙ!(c)Стругацкие Пикник на обочине
Member
Статус: Не в сети Регистрация: 16.04.2004 Откуда: [MSK.RU]
Как заставить службу нормально работать по-русски? В смысле, не выдавать вместо русскоязычных сообщений крокозябры, корректно сравнивать полученные с помощью GetWinText и прочитанные из файла строки и т.п. "Обычное" приложение с функциями, осуществляющими вышеизложенное, работает нормально.
Кто нибудь может объяснить аномальное поведение переменных типа Single в Delphi Если эту переменную объявить как Real, то все впорядке, но OpenGL работает с Glfloat, аналогами которых в Delphi является Single. Цифр 149 вообще быть не должно, т.к. там всего 7-8 значящих цифр.
8 верных значащих цифр как раз и есть, остальные - ошибка - все верно. А для вывода float-чисел должен же быть определенный формат - там выводил бы 5-6 цифр после запятой. Если не секрет, что пишешь на ogl?
Member
Статус: Не в сети Регистрация: 25.01.2008 Откуда: СПб
Delin Визуализацию движения простейших тел вращения. Есть алгоритм рассчитывающий точку соприкосновения двух тел. Задача - визуально проконтролировать его работу.
Member
Статус: Не в сети Регистрация: 13.06.2007 Откуда: UK/Glasgow Фото: 0
Допустим есть массив записей и я вывожу его в ListBox. Как мне реализовать следующее: я выделяю какую-то запись в листбоксе и по нажатии кнопки эта запись удаляется как из листбокса так и из массива?
Member
Статус: Не в сети Регистрация: 25.01.2008 Откуда: СПб
SwiPTorrent Немного философии.
Удаление произвольного элемента из динамического массива с изменением его длины крайне ресурсоемкая задача, т.к. все элементы динамического массива стоящие за удаляемым должны сдвинутся в памяти на одну позицию. В данном случае гораздо продуктивнее использовать связанный список, каждый элемент которого ссылается на область в памяти в которой расположен следующий элемент. Тогда для удаления строки будет достаточно поменять указатель у предыдущей строки так, чтобы он указывал на следующую за удаляемой. Минус состоит в том, что для доступа к н-ному элементу потребуется пробежать все предыдущие.
К практике. 1. Для чего держать в памяти два идентичных списка строк? Как правило можно обойтись считыванием к примеру ListBox1.Items.Strings[i], где i - номер интересующей тебя строки. 2. Если действительно надо, то присмотрись к классу TStringList. Пример http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=32604&filename=Help2.zip
Если действительно надо, то присмотрись к классу TStringList
а смысл за собой весь класс тащить если нужен от него только массив? можно и самому использовать статичный массив а второй способ.... пусть будет двусвязный список, а ListBox будет хранить ссылки на каждый элемент, тогда можно легко по индексу обратится, а так же изменить перерисовку ListBox, что бы он выводил данные из прикреплённого узла, а не из своего массива.
Member
Статус: Не в сети Регистрация: 25.01.2008 Откуда: СПб
Цитата:
а смысл за собой весь класс тащить если нужен от него только массив?
Автоматизация. А вдруг потом надо будет в текстовый или бинарный файл сохранить(загрузить), а тут методы SaveToFile и SaveToStream (LoadFromFile и LoadFromStream), ну и удобные вещи типа Insert, Add, Delete, Clear, Find, Sort. Все это впоследствии может сохранить кучу времени и сил.
ну как вариант... хотя лучше всего заранее знать что понадобится... и использовать методы покрывающие эти и только эти задачи, но знать как в дальнейшем проект можно переделать под некоторое расширение задачи. а TStringList мне немного не нравится для данной задачи тем, что он сразу выделяет память под немаленький массив размером [0..MaxListSize] универсально и автоматизированно конечно, но многовато)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения