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

Вниз

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

 
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 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.057 c
11-1105680010
DmiSb
2005-01-14 08:20
2005.08.21
Проверить содержимое каталога


4-1119339646
ANB
2005-06-21 11:40
2005.08.21
Что передать в качестве окна для SetForegroundWindow ?


14-1122620079
Ёжик
2005-07-29 10:54
2005.08.21
Net use


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


6-1115347102
piople
2005-05-06 06:38
2005.08.21
ISAPI





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский