Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

Проблема с Потоками   Найти похожие ветки 

 
wesel ©   (2007-08-27 05:40) [0]

Доброе время суток всем Мастерам!

Создал поток, Примерно так он віглядит в программе:
procedure findthread.Execute;
var
book,sheet,find,rows:integer;
range:variant;
str:array [0..7] of string;
fnd:boolean;
begin
 while not Terminated do
begin
  book:=0;
  find1.BookPos.Max:=find1.LB1.Items.Count;
 while book<find1.LB1.Items.Count do
  begin
  try
  E:= CreateOleObject("Excel.Application");
  except
  end;
  E.workbooks.open(find1.LB1.Items.Strings[book]);
....

Вопрос в том что на последней строке он відает следующее исключение "Не был произведен вызов CoInitialize"  Ошибка EOLESysError

Сам поток запускаеться нормально, Но только стоит попытаться открыть  объект типа ексел, так сразу выдает такое исключение!!!!

Просто как я понял "Программа разделяеться на основной поток и те которые запущены из основного, во второстепеном потоке можно также описывать разные функцие , и вызывать объекты как и в основном потоке программы",

Помогите если я что то не так понял .


 
Slym ©   (2007-08-27 05:57) [1]

begin
if Failed(CoInitialize(nil)) then RaiseLastOSError;
try
  while not Terminated do
........
finally
 CoUninitialize;
end;
end;


 
DrPass ©   (2007-08-27 10:00) [2]

В оффтопик:

> find1.BookPos.Max:=find1.LB1.Items.Count;

Это - компоненты на форме? Будешь так с ними обращаться в потоке - еще не один баг огребешь... :)


 
Slym ©   (2007-08-27 13:54) [3]

Если они не визуальные, то для начала и так работать будет :)


 
DrPass ©   (2007-08-27 16:20) [4]


> Slym ©   (27.08.07 13:54) [3]

Внутренний голос мне подсказывает, что первое - TProgressBar, второе - TListBox :)


 
clickmaker ©   (2007-08-27 17:19) [5]


> if Failed(CoInitialize(nil)) then RaiseLastOSError;

RaiseLastOSError - бессмысленно. Здесь свои коды возврата: E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED, S_OK, E_FAIL


 
Leonid Troyanovsky ©   (2007-08-27 17:58) [6]


> clickmaker ©   (27.08.07 17:19) [5]

> RaiseLastOSError - бессмысленно.

Да и нехорошо без синхронизации-то.

--
Regards, LVT.


 
wesel ©   (2007-08-27 20:29) [7]

Синхронизация идет дальше в коде , когда поиск дает свои результаты, тогда и синхронизирую вывод информации, на форме!!!,


> begin
> if Failed(CoInitialize(nil)) then RaiseLastOSError;
> try
>   while not Terminated do
> ........
> finally
>  CoUninitialize;> end;
> end;

Спасибо за помощь.!!!!  Но кто то может пояснить

> > clickmaker ©   (27.08.07 17:19) [5]
>
> > RaiseLastOSError - бессмысленно.


 
sniknik ©   (2007-08-27 21:21) [8]

> Но кто то может пояснить
[5]
> Здесь свои коды возврата ...
а не через GetLastError как в основном у winapi функций.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.049 c
15-1188204801
ocean
2007-08-27 12:53
2007.09.23
Как сохранить документы?


15-1188209341
Ломброзо
2007-08-27 14:09
2007.09.23
Как вернуть домен


15-1187794466
Галинка
2007-08-22 18:54
2007.09.23
На чем сделать схему датасета


3-1174479646
DelphiLexx
2007-03-21 15:20
2007.09.23
Объект по работе с cross-таблицей


15-1187955060
Aust
2007-08-24 15:31
2007.09.23
восстановление хп





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский