Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
1

Почему нет AV?

02.05.2017, 01:11. Показов 1268. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему нет ошибки?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Type
  /// <summary>
  ///  Поток для нумирации строк
  ///  Обращается к одной ячейки памяти таблицы
  /// </summary>
  TSGHreadNumbering = class(TTHread)
    private
    FPointSG: Pointer;
    FExit   : boolean;
    public
      procedure ExitHread;
      procedure execute; override;
      Property  PointSG : Pointer read FPointSG write FPointSG;
 
  end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{ TSGHreadNumbering }
 
procedure TSGHreadNumbering.execute;
var
 i_sg : integer;
 sg   : TStringGrid;
 rowsC: integer;
begin
 sg   := Pointer(FPointSG^);
  while FExit = false do
  begin
    if sg <> nil then
      for i_sg := sg.FixedRows to sg.RowCount -1 do
      begin
        sg.cells[0, i_sg] := i_sg.ToString;
      end;
    sleep(20);
  end;
end;
Концепция такова, выполняю поток без синхронизации, обращаюсь к общей ячейки памяти.
Нумерую StringGrid в зависимости от количества строк.
Все работает строки нумеруются.

Уже и так и так. Нет AV.
В чем проблема?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2017, 01:11
Ответы с готовыми решениями:

Почему нет продолжения поиска файлов?
repeat FindFirst('*.*',faAnyFile,sr); FindNext(sr); showmessage(sr.name); //только (..) ...

почему в Delphi XE3 лайт нет форматирования?
почему в Delphi XE3 лайт нет форматирования? или я плохо смотрел Добавлено через 19 секунд...

Почему нет файла Proxies.dcu из Delphi 6
И почему у меня его нет :(

Почему Vk_Delete срабатывает только на OnMouseUp, а на OnKeyPress и OnKeyDown - нет?
Почему Vk_Delete срабатывает только на OnMouseUp, а на OnKeyPress и OnKeyDown нет?

6
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
02.05.2017, 05:32 2
а где остальной код?
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
02.05.2017, 09:20  [ТС] 3
Цитата Сообщение от krapotkin Посмотреть сообщение
а где остальной код?
Delphi
1
2
3
4
5
6
7
8
9
10
11
var
procedure TMainForm.FormCreate(Sender: TObject);
var
  h : TSGHreadNumbering;
begin
  h := TSGHreadNumbering.Create(true);
  h.Priority := tpLowest;
  h.PointSG := @SG;
  h.FreeOnTerminate := true;
  h.Resume;
end;
SG это таблица StringGrid

Добавлено через 2 минуты
Остальной код я думаю не нужен. Работаю с таблицей как как обычно. (Добавляю, удаляю, перемещаю, сортирую, меняю значение)

Вопрос в том что, нумерация выполняется без синхронизации.

Добавлено через 6 минут
Есть разница между?
sg := Pointer(FPointSG^);

и

sg := MainForm.SG;

FPointSG указатель.
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
02.05.2017, 09:33 4
Лучший ответ Сообщение было отмечено popryduhin как решение

Решение

вот это
pointer(FPointSG^) - это первые 4 байта объекта грид, трактуемые как pointer. т.е. вряд ли то что нужно

то , что AV не выскочило, это не значит, что все идет правильно

Добавлено через 1 минуту
если работает, оставьте как есть. правила синхронизации вас не касаются ))
грабли сами найдут вас когда наступит время
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
02.05.2017, 10:15  [ТС] 5
Цитата Сообщение от krapotkin Посмотреть сообщение
если работает, оставьте как есть. правила синхронизации вас не касаются ))
грабли сами найдут вас когда наступит время
Я согласен с Вами. У меня на форуме здесь спор возник на эту тему и на счет синхронизации.
И вот один человек категорически не хочет что бы я так делал.

Я вчера на эту тему думал долго. Читал форумы. Конфликт может произойти при одновременном использовании одной ячейки памяти. Но ведь получается что в данной задаче я только записываю информацию.

Или есть еще что то. Приложение работает как часы, как бы я приоритет потока не менял и не удалял строки. в SG.
Как бы я не таскал за шапку приложение. Нет AV.

Я вот тоже думаю зачем в данном случае синхронизация. В таком случае можно было и без потока нумеровать...
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
02.05.2017, 10:37 6
1. поток здесь не нужен и даже вреден. потоки нужны для фоновых работ, не для работы с экраном, которая производится только в главном потоке
2. не переживайте, ошибки в синхронизации обязательно появятся, когда программа станет чуть сложнее...
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
02.05.2017, 10:41  [ТС] 7
Цитата Сообщение от krapotkin Посмотреть сообщение
1. поток здесь не нужен и даже вреден. потоки нужны для фоновых работ, не для работы с экраном, которая производится только в главном потоке
2. не переживайте, ошибки в синхронизации обязательно появятся, когда программа станет чуть сложнее...
Спасибо. В качестве опыта думаю сойдет ))) что бы понять что это за грабли на них нужно наступить...
0
02.05.2017, 10:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2017, 10:41
Помогаю со студенческими работами здесь

Почему код компилится и логика верна, а результаты арифм. операций нет?
задача состоит в создании двух массивов склавиатуры и суммы их елементов вместе и...

кто может объяснить,почему на моем компе программа работает на других нет?код в Delphi
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Почему нет PR?
Сайт уже существует два месяца,прогонялся по каталогам,ТИЦ в Яндексе 50 и 130 ссылок,а в Google PR0...

Почему нет замены
Нашёл формулу в инете Selection.Find.Execute(&quot;Îáú¸ì&quot;, 0,0,0,0,0, 1,1, 0,&quot;11111&quot;,2) но почему то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru