Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Вызов процедуры основного модуля из потока   Найти похожие ветки 

 
DelphiN! ©   (2005-06-24 14:55) [0]

Создал поток, в него запихал работу с Firebird-ом, и теперь при выполнении скажем MYMODULE.IbDataBase.Append; из дополнительного потока Приложение просто зависает, пытался под отладкой посмотреть, но отладчик просто не заходит в Append, и останавливается на этой строчке без каких либо сообщений. Когда процедура была в основном потоке все работало ...

Что за САБЖ ?


 
Digitman ©   (2005-06-24 15:07) [1]

пока ты не перестанешь "пихать", так и будешь иметь проблемы)

ну НЕТ в программинге понятия "пихать" !!!


 
DelphiN! ©   (2005-06-24 15:17) [2]

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


 
Digitman ©   (2005-06-24 15:41) [3]


> что тут плохого ?


а что такое "пихать" ?


> Создал поток, в него запихал работу с Firebird-ом


не создал ты его.

ты просто описал класс (или что у тебя там - поточная ф-ция ?), "напихав" чего-то там куда-то)

создашь же ты его (поток) только в ран-тайм


 
DelphiN! ©   (2005-06-24 15:50) [4]

А я про рантайм и говорю


 
DelphiN! ©   (2005-06-24 15:56) [5]

Поток выполняется, это у меня оказывается отладчик глючит немного иногда, только почему зависает основной поток, как будто все действия выполняются в нем, ведь ожидания завершения у меня не стоит


Unit ThCreateRep;

type
 TCreateRep = class(TThread)
..
procedure TCreateRep.CreateReport;
begin
 ...
end;

procedure TCreateRep.Execute;
begin
 CreateReport;
end;
end.

Unit Main;
...

Uses ThCreateRep;
...
var
 Th: ThCreateRep;
begin
 Th := ThCreateRep.Create(false);
end.


 
-=XP=- ©   (2005-06-24 15:59) [6]

procedure TCreateRep.CreateReport;
begin
...
end;


Весьма информативно...

MYMODULE.IbDataBase.Append - что, прям так в потоке и вызываете?


 
evvcom ©   (2005-06-24 16:00) [7]

Да... всё очень понятно. Особенно момент работы с Append


 
DelphiN! ©   (2005-06-24 16:01) [8]

procedure TCreateRep.CreateReport;
begin
 ...  
 MYMODULE.IbDataBase.Append;
 ...
end;


 
-=XP=- ©   (2005-06-24 16:05) [9]

procedure TCreateRep.CreateReport;
begin
...  
MYMODULE.IbDataBase.Append;
...
end;


Молодец. Возьмите с полки пирожок.
Заодно и книгу про работу с потоками.
И внимательно почитайте.


 
DelphiN! ©   (2005-06-24 16:09) [10]

А что тут как из другого модуля процедуру вызвать ?


 
-=XP=- ©   (2005-06-24 16:19) [11]

При обращении нескольких потоков к одним и тем же данным, если эти данные не являются потокобезовасными или потокозащищенными, возникает множество проблем. Каких - читайте в литературе.
В данном случае Вы напрямую обращаетесь к компоненту, размещенному в модуле, которые доступны  и управляются из основного потока.

Для того, чтобы Вы поняли, что Вы сделали, напишите какой нибудь класс, изменяющий напрямую какую-то глобальную строковую переменную. А в основном потоке читайте значение этой переменной и выводите его на какой-то Label. Создайте несколько экземпляров этого потока - и наслаждайтесь...

Для решения Вашего вопроса существует множество решений - от создания приватной (доступной только для этого потока) классовой переменной (ну, у Вас там Database используется?), и работа с ней только из этого потока, и до использования различных методов синхронизации потоков - критические секции, мьютексы, семафоры и пр. В Вашей ситуации - лучше использовать еще один, внутрипотоковый, экземпляр Database.


 
-=XP=- ©   (2005-06-24 16:27) [12]

лучше использовать еще один, внутрипотоковый, экземпляр Database

Только ж не вздумайте "связывать" его с экземплярами из других потоков. А то, мало ли что у Вас там Database"ом зовется?


 
NikNet ©   (2005-06-24 20:22) [13]

Удалено модератором


 
DelphiN! ©   (2005-06-25 12:02) [14]

Все, полез читать, всем большое спасибо !



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

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
1-1122558093
kyn66
2005-07-28 17:41
2005.08.21
Непонятки с отрисовкой картинки в Listbox


14-1122465956
NorthMan
2005-07-27 16:05
2005.08.21
Установка Oracle Client 9


3-1121248213
linesoft
2005-07-13 13:50
2005.08.21
Отладчик процедур MS SQL


3-1121175517
cvg
2005-07-12 17:38
2005.08.21
Доступ к компоненту SQLQuery из текста проги


14-1122473064
Андрей Жук
2005-07-27 18:04
2005.08.21
Почитав Софта, я подумал