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

Вниз

Корректно ли создать в методе TThread.Execute VCL-компоненты?   Найти похожие ветки 

 
Calm   (2003-09-02 17:13) [0]

Как известно, для доступа к формам и т.д. из потоков (TTread) необходимо задействовать метод Synchronize. При этом гарантируется, что два потока не обратятся одновременно к одному VCL-объекту. Вроде так, я ничего не напутал?
А можно ли создавать в методе Execute VCL-объект (для каждого потока свой получится) и юзать его? Будет ли это стабильно работать?

Вообще, задача такова.
С внешнего устройства на COM-порт поступают данные. Поступают достаточно часто. Как только данные считаны, я хочу создать поток, который их обработает и внесент соответствующие записи в БД. Поскольку в пиковые моменты нагрузки данные могут поступать очень часто, то хочется вести обработку и запись в БД в отдельных потоках. Для доступа к БД нужно создавать в run-time компоненты TADOConnection и TADOCommand.

Такие дела...
Буду благодарен за советы :)


 
Юрий Федоров   (2003-09-02 17:15) [1]

Если в конструктор компонента параметром передавать nil, то наверно проблем быть не должно. Хотя смотря как они реализованы, эти компоненты...


 
han_malign   (2003-09-02 17:20) [2]

Using the main VCL/CLX thread
.......................................
Data access components are thread-safe as follows: For BDE-enabled datasets, each thread must have its own database session component. The one exception to this is when you are using Microsoft Access drivers, which are built using a Microsoft library that is not thread-safe. For dbExpress, as long as the vendor client library is thread-safe, the dbExpress components will be thread-safe. ADO and InterBaseExpress components are thread-safe.
When using data access components, you must still wrap all calls that involve data-aware controls in the Synchronize method. Thus, for example, you need to synchronize calls that link a data control to a dataset by setting the DataSet property of the data source object, but you don"t need to synchronize to access the data in a field of the dataset.

For more information about using database sessions with threads in BDE-enabled applications, see Managing multiple sessions


 
Polevi   (2003-09-02 17:25) [3]

>Calm © (02.09.03 17:13)
все нормально будет, не забудь только

procedure TMyThread.Execute;
begin
CoInitialize(nil);
try
conn:=TAdoConnection.Create(nil);
ds:=TADODataset.Create(nil);
...
...

finally
CoUninitialize;
end;
end;


 
Calm   (2003-09-02 17:31) [4]

2 Polevi ©
А как быть с

> When using data access components, you must still wrap all
> calls that involve data-aware controls in the Synchronize
> method.

?
Или это только для тех data-aware controls, которые созданы не в потоке?


 
Polevi   (2003-09-02 17:56) [5]

data-aware это всякие гриды, дбкомбо и проч., компоненты доступа к ним не относятся..

то есть
> When using data access components, you must still wrap all
> calls that involve data-aware controls in the Synchronize
> method.
надо переводить так:

если твой адодатасет связан через датасурсе с дбгридом, работать с методами датасета ты можешь только в основгном потоке через Syncronize, иначе вызов метода (к примеру) Next в доп кодовом потоке приведет
к нехорошим последствиям


 
Calm   (2003-09-02 19:05) [6]


> data-aware это всякие гриды, дбкомбо и проч., компоненты
> доступа к ним не относятся..

Тьфу, знал же ведь.

Всем большое спасибо :)



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

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

Наверх





Память: 0.46 MB
Время: 0.012 c
1-48537
VID
2003-09-02 09:21
2003.09.15
Не могу понять, что за фигня...


1-48627
GreatMaster
2003-09-03 09:19
2003.09.15
D6-7 - юникод русских букв в DFM как отключить?


6-48669
bullet
2003-07-13 18:40
2003.09.15
Заполнить и отправить хтмл форму


1-48530
XDefender
2003-09-02 10:31
2003.09.15
Какой компонент позволяед редактировать HTML текст визуально?


1-48582
Karburator
2003-08-28 14:51
2003.09.15
Сортировка файлов по дате ShellListView





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