Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2011, 11:20   #1
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию Ошибка в потоках (Access violation at address)

Здравствуйте.
В потоках синхронизирую процедуру ProgressInts1, для отображения прогресса в ячейке TAdvStringGrid
Код:
Synchronize(ProgressInts1);
Вот сама процедура.
Код:
procedure TNewAllPost.ProgressInts1;
begin
 try
  Form1.DbGridForum.Ints[10,Fint]:=RandomRange(5,25);
  except
  on e:exception do
     inilog.Writestring('Error', datetostr(date)+' '+
      timetostr(time), 'ProgressInts1: '+e.Message);
  end;
end;
И вот иногда выскакивает ошибка что я указал ниже, интересно то что процедура может запускаться сотни раз, а ошибка может появится раза 2-3, собственно что можно сделать с этим ? вроде же доступ к VCL компоненту синхронизируется, но в чём дело не знаю (((, буду благодарен за помощь.

Код:
24.08.2011 10:03:30=ProgressInts1: Access violation at address 005950EB in module 'FastPostForum.exe'. Read of address 00000014
designer999 вне форума Ответить с цитированием
Старый 24.08.2011, 11:26   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А покажите как в потоке вы синхронизируете

ADD
Проглядел Synchronize(ProgressInts1);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.08.2011 в 12:08.
Аватар вне форума Ответить с цитированием
Старый 24.08.2011, 11:58   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

я бы использовал SendMessage из потока в vcl , так надёжнее.
На вскидку я бы ещё подключил MadExcept или EurekaLog там уже можно былобы что-то сказать о причинах ошибки.
Человек_Борща вне форума Ответить с цитированием
Старый 24.08.2011, 12:08   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Access violation at address 005950EB
Для поиска граблей используй меню IDE
Search -> Find Error .. -> 005950EB
mss вне форума Ответить с цитированием
Старый 24.08.2011, 13:59   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://www.gunsmoker.ru/2009/05/access-violation.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 24.08.2011, 17:27   #6
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
я бы использовал SendMessage из потока в vcl , так надёжнее.
в этом случае как его использовать? можно пример
designer999 вне форума Ответить с цитированием
Старый 24.08.2011, 17:56   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
const 
  THIS_IS_SPARTA = WM_USER + 454; //WM_USER константа из messages.pas

type
  TForm1 = class(TForm)
  {blabla}
 public
 procedure OnSpartaMsg(var msg:TMessage); message THIS_IS_SPARTA; 


{ bla bla bla }

Procedure TForm1.OnSpartaMsg(var msg:TMessage); message THIS_IS_SPARTA; 
begin
ProgressBar.Max:=Msg.LParam;
end;
В потоке прописать туже константу. А затем:
Код:
uses MainFormUnit; //TForm1 

begin
{thread code}
SendMessage(Form1.handle,THIS_IS_SPARTA,0,<передаваемое число из потока в форму>);
end;
Загугли ну а лучше в msdn прочитай про sendmessage в ещё незаменимый источник информации это справка delphi
Человек_Борща вне форума Ответить с цитированием
Старый 25.08.2011, 10:21   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

В данном случае SendMessage от Synchronize ничем не отличается.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.08.2011, 13:22   #9
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Сообщение от designer999 Посмотреть сообщение
как его использовать?
Synchronize или SendMessage - в дан.случае фиолетово.
Никакого отношения к причине AV это не имеет.
А причина совершенно очевидно в другом - nil или мусор либо в Form1 либо в DbGridForum
mss вне форума Ответить с цитированием
Старый 25.08.2011, 16:04   #10
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Память для DbGridForum.Ints[10,Fint] выделена?
Недостаточно кода для выявления ошибки.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 25.08.2011 в 16:06.
chertovich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка access violation at address 400 3b 648 in module tri 70 bpi. алексей313 Помощь студентам 0 26.04.2011 17:27
Ошибка "Access violation at address 004043A8 in module 'Project1.exe'. Read of address 00FF5A53." ms.Karishka Общие вопросы Delphi 6 14.04.2011 22:18
Access violation at address 00447E73 in modul Project.exe. Read of address 00000057. ArtGrek Общие вопросы Delphi 40 12.03.2011 22:03
ошибка access violation at address ... Yuran БД в Delphi 5 05.01.2011 16:04
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 20:13