Главная страница
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.064 c
1-1122630609
Aleksandr.
2005-07-29 13:50
2005.08.21
Как правильно удалить TMenuItem?


14-1122366787
Жук
2005-07-26 12:33
2005.08.21
На сколько полезен секс по утрам?


6-1115956502
@ndrew
2005-05-13 07:55
2005.08.21
Ошибки работы TSocket


1-1122555152
Zikmu
2005-07-28 16:52
2005.08.21
PAnsiChar и String


4-1120218420
misyachniy
2005-07-01 15:47
2005.08.21
Компонент для работы с COM портом работает в Me в XP не хочет