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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2009, 02:00   #1
User>lia
 
Регистрация: 16.01.2009
Сообщений: 4
По умолчанию Ошибка в потоке

Я создаю топок в котором должна получать данные с сервера приложений (использую DCOMConnection),
Код:
....
obj := CreateOleObject('ComS.interf_');
....
procedure TSimpleThread.Execute;
begin
 CoInitialize(nil);
      repeat
      Form1.Tabl.Cells[i, 2]:= FloatToStr(obj.Value_float);
      Form1.Tabl.Cells[i, 1]:= TimeToStr(Time);
      Form1.Tabl.Cells[2, 4]:= obj.BS;
   until Terminated;
  CoUninitialize;
end;
но появляется сообщение об ошибке:" ...Приложение обратилось к интерфейсу, относящемуся к другому потоку. ...stopped..."
Что я не так делаю???

Последний раз редактировалось rpy3uH; 20.01.2009 в 16:18.
User>lia вне форума Ответить с цитированием
Старый 20.01.2009, 08:29   #2
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

Про метод Synchronize слышал? почитай про него..

в месте..
Form1.Tabl.Cells[i, 2]:= FloatToStr(obj.Value_float);
Form1.Tabl.Cells[i, 1]:= TimeToStr(Time);
Form1.Tabl.Cells[2, 4]:= obj.BS;

Ты обрашаешься на прямую из потока к Form1 в то время твоя форма может быть занята(Например пользователь записывает, выделяет или еще что либо делает с Tabl.Cells и не только с ней)...

в крадце создай процедуру в потоке что то на подобие SynchronizeForm
без параметров..

в ней опиши свое
Form1.Tabl.Cells[i, 2]:= FloatToStr(obj.Value_float);
Form1.Tabl.Cells[i, 1]:= TimeToStr(Time);
Form1.Tabl.Cells[2, 4]:= obj.BS;

а в Execute; вызывай Synchronize(SynchronizeForm)
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 20.01.2009, 14:50   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Если не ошибаюсь еще можно более муторно провернуть по средством SendMessage ^_^
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 20.01.2009, 14:54   #4
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

Цитата:
Сообщение от SNUPY Посмотреть сообщение
Если не ошибаюсь еще можно более муторно провернуть по средством SendMessage ^_^
А смысл? там писать тут писать.. )))
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 20.01.2009, 16:31   #5
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

в принципе нет, но надо знать, что так можно ^_^.... Хотя вот хз, что быстрее будет работать, просто порой красивее обойтись SendMessage'ом.
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 20.01.2009, 18:55   #6
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Иногда полезно почитать Рихтера, если занимаешься программированием под Виндоус.
Д'якон вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
TClientSocket в потоке BlackOmen Работа с сетью в Delphi 8 27.04.2008 22:19
Запрос к БД в отдельном потоке (Thread) tyrell lab БД в Delphi 1 14.06.2007 08:42
как вызвать в Dll по указателю функцию, которая определена в главном потоке? SaintRain Общие вопросы Delphi 1 25.11.2006 08:27
как вызвать из Dll функцию, которая определена в главном потоке? SaintRain Win Api 1 23.11.2006 20:08