Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 110 из 116<  1 ... 107  108  109  110  111  112  113 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
SwiPTorrent Напиши свой компонент :tooth:

Кто нибудь может объяснить аномальное поведение переменных типа Single в Delphi
#77
:?:
Если эту переменную объявить как Real, то все впорядке, но OpenGL работает с Glfloat, аналогами которых в Delphi является Single. Цифр 149 вообще быть не должно, т.к. там всего 7-8 значящих цифр.
#77
И тем не менее они выводятся даже при печати. :insane:

_________________
*AMD OverClan*



Партнер
 

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; }

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 17.02.2009
Откуда: Россия, Пермь
R73
А мог бы более подробно объяснить?
Код:
 //Меняем приоритет
  A[0].Priority := tpNormal;
  A[1].Priority := tpHigher;
  A[2].Priority := tpLower;

как это увязать с несколькими потоками и комбобоксом?была мысль сделать так
Код:
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
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
Varabaiba писал(а):
А мог бы более подробно объяснить?

Вечером постараюсь расписать
Varabaiba писал(а):
А про синхронизацию вообще впервые слышу нам на паре ничего не сказали

:shock: VLC компоненты не защищены от потоков. Если обращаться к ним из тела потока без синхронизации, приложение должно рухнуть.

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=32573&filename=Help.zip
Вот так ИМХО. Единственное тормозить потоки пришлось искусственно, иначе они основному приложению жить не давали :(

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 17.02.2009
Откуда: Россия, Пермь
R73
Спасибо, кстати нам почемуто говорили потоки создавать отдельно, а тут как я вижу они все в одном unit е или это не принципиально?

_________________
СЧАСТЬЕ ДЛЯ ВСЕХ, ДАРОМ, И ПУСТЬ НИКТО НЕ УЙДЁТ ОБИЖЕННЫЙ!(c)Стругацкие Пикник на обочине


 

Member
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
Вообще отдельно правильнее.
Проще всего File=>New=>Other=>Thread Object

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 17.02.2009
Откуда: Россия, Пермь
R73
Ага именно так и делаю :-) Ну в общем отдельно правильнее просто потому что так повелось?типа как культурно писать с комментариями?

_________________
СЧАСТЬЕ ДЛЯ ВСЕХ, ДАРОМ, И ПУСТЬ НИКТО НЕ УЙДЁТ ОБИЖЕННЫЙ!(c)Стругацкие Пикник на обочине


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
Как заставить службу нормально работать по-русски? В смысле, не выдавать вместо русскоязычных сообщений крокозябры, корректно сравнивать полученные с помощью GetWinText и прочитанные из файла строки и т.п. "Обычное" приложение с функциями, осуществляющими вышеизложенное, работает нормально.


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Добавил в записи переменную типа integer, и компилятор выдаёт ошибку: invalid compiler directive

_________________
-=AMD POWER FAN CLUB=-


 

Member
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
SwiPTorrent Код в студию

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Не, уже не надо, оказывается делфи коряво поставился :gun:

_________________
-=AMD POWER FAN CLUB=-


 

Member
Статус: Не в сети
Регистрация: 17.10.2005
R73
Цитата:
Кто нибудь может объяснить аномальное поведение переменных типа Single в Delphi
Если эту переменную объявить как Real, то все впорядке, но OpenGL работает с Glfloat, аналогами которых в Delphi является Single. Цифр 149 вообще быть не должно, т.к. там всего 7-8 значящих цифр.

8 верных значащих цифр как раз и есть, остальные - ошибка - все верно. А для вывода float-чисел должен же быть определенный формат - там выводил бы 5-6 цифр после запятой. Если не секрет, что пишешь на ogl?


 

Member
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
Delin Визуализацию движения простейших тел вращения. Есть алгоритм рассчитывающий точку соприкосновения двух тел. Задача - визуально проконтролировать его работу.

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Допустим есть массив записей и я вывожу его в ListBox. Как мне реализовать следующее: я выделяю какую-то запись в листбоксе и по нажатии кнопки эта запись удаляется как из листбокса так и из массива?

_________________
-=AMD POWER FAN CLUB=-


 

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

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 27.05.2007
Цитата:
Если действительно надо, то присмотрись к классу TStringList

а смысл за собой весь класс тащить если нужен от него только массив? можно и самому использовать статичный массив
а второй способ.... пусть будет двусвязный список, а ListBox будет хранить ссылки на каждый элемент, тогда можно легко по индексу обратится, а так же изменить перерисовку ListBox, что бы он выводил данные из прикреплённого узла, а не из своего массива.


 

Member
Статус: Не в сети
Регистрация: 25.01.2008
Откуда: СПб
Цитата:
а смысл за собой весь класс тащить если нужен от него только массив?

Автоматизация. А вдруг потом надо будет в текстовый или бинарный файл сохранить(загрузить), а тут методы SaveToFile и SaveToStream (LoadFromFile и LoadFromStream), ну и удобные вещи типа Insert, Add, Delete, Clear, Find, Sort. Все это впоследствии может сохранить кучу времени и сил.

_________________
*AMD OverClan*


 

Member
Статус: Не в сети
Регистрация: 27.05.2007
ну как вариант...
хотя лучше всего заранее знать что понадобится... и использовать методы покрывающие эти и только эти задачи, но знать как в дальнейшем проект можно переделать под некоторое расширение задачи.
а TStringList мне немного не нравится для данной задачи тем, что он сразу выделяет память под немаленький массив размером
[0..MaxListSize]
универсально и автоматизированно конечно, но многовато)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 110 из 116<  1 ... 107  108  109  110  111  112  113 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan