![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с Потоками [D6, XP]
wesel © (2007-08-27 05:40:00)Доброе время суток всем Мастерам!
Создал поток, Примерно так он віглядит в программе:
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
Сам поток запускаеться нормально, Но только стоит попытаться открыть объект типа ексел, так сразу выдает такое исключение!!!!
Просто как я понял "Программа разделяеться на основной поток и те которые запущены из основного, во второстепеном потоке можно также описывать разные функцие , и вызывать объекты как и в основном потоке программы",
Помогите если я что то не так понял .
sniknik (2007-08-27 21:21:00) [1]> Но кто то может пояснить
[5]
> Здесь свои коды возврата ...
а не через GetLastError как в основном у winapi функций.
wesel (2007-08-27 20:29:00) [2]Синхронизация идет дальше в коде , когда поиск дает свои результаты, тогда и синхронизирую вывод информации, на форме!!!,
> begin
> if Failed(CoInitialize(nil)) then RaiseLastOSError;
> try
> while not Terminated do
> ........
> finally
> CoUninitialize;> end;
> end;
Спасибо за помощь.!!!! Но кто то может пояснить
> > clickmaker © (27.08.07 17:19) [5]
>
> > RaiseLastOSError - бессмысленно.
Leonid Troyanovsky (2007-08-27 17:58:00) [3]
> clickmaker © (27.08.07 17:19) [5]
> RaiseLastOSError - бессмысленно.
Да и нехорошо без синхронизации-то.
--
Regards, LVT.
clickmaker (2007-08-27 17:19:00) [4]
> if Failed(CoInitialize(nil)) then RaiseLastOSError;
RaiseLastOSError - бессмысленно. Здесь свои коды возврата: E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED, S_OK, E_FAIL
DrPass (2007-08-27 16:20:00) [5]
> Slym © (27.08.07 13:54) [3]
Внутренний голос мне подсказывает, что первое - TProgressBar, второе - TListBox :)
Slym (2007-08-27 13:54:00) [6]Если они не визуальные, то для начала и так работать будет :)
DrPass (2007-08-27 10:00:00) [7]В оффтопик:
> find1.BookPos.Max:=find1.LB1.Items.Count;
Это - компоненты на форме? Будешь так с ними обращаться в потоке - еще не один баг огребешь... :)
Slym (2007-08-27 05:57:00) [8]begin
if Failed(CoInitialize(nil)) then RaiseLastOSError;
try
while not Terminated do
........
finally
CoUninitialize;
end;
end;