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

Вниз

TThread. Направьте на путь истинный...   Найти похожие ветки 

 
xtreme   (2003-04-01 10:42) [0]

Привет всем...

Ситуация простая. В основном модуле реализованы 2 функции:
1.. функция, которая читает данные из файла и засовывает их в
поток с (TMemoryStream);
2.. функция, которая берет эти данные из потока
(TMemoryStream), форматирует и пишет на диск;

Чего хочется: организовать два потока (TThread). Первый вызывает 1-ю функцию, 2-й поток вторую.

Вопрос: на сколько потокобезопасным будет вызов функций основного модуля из этих двух потоков? Может что посоветуете?

С Уважением,
Игорь.


 
Romkin ©   (2003-04-01 11:18) [1]

Хреново - тебе все равно надо их синхронизировать при обращении к TMemoryStream, так что не вижу особой разницы по сравнению с одним потоком


 
Digitman ©   (2003-04-01 11:26) [2]


> Romkin


ну, наверно, трэды-то кроме обращения к потоку еще и иной немалой функц-ю обладают) ... пре/пост обработка ввода/вывода, скажем ... так что идея с 2-мя трэдами, скорей всего, имеет право на существование

разумеется, синхронизация доступа к одному и тому же потоку должна быть реализована


 
Polevi ©   (2003-04-01 12:26) [3]

CricitalSection для блокировки
PostThreadMessage, Event, Mutex, Semaphore для сообщения потоку 2 что есть данные


 
malkolinge ©   (2003-04-01 12:58) [4]

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


 
Polevi ©   (2003-04-01 13:01) [5]

это такое правило прописано


 
Zemal ©   (2003-04-01 13:04) [6]

Просишь направить на путь истинный? Ну получай! :) Затаривайся литературой и читай-читай-читай :). Вопрос у тебя возникает только потому что ничего про потоки незнаешь... так что единственный путь для решения твоей проблемы это досканально разобраться с потоками, а не лезть в форумы и ждать готового кода :). На самом деле у тебя элементарный пример работы с семафорами и т.д. И никакой проблемы нет :).


 
Zelius ©   (2003-04-01 14:10) [7]

Мое мнение: две последовательные задачи - следовательно нет смысла делать два потока, все прекрасно и в одном переживет! Синхронизировать вызовы в главный поток надо обязательно, другое дело как это делать! Скорее всего одним из способов: TThread.Synchronize, CriticalSection, Post/SendMessage. Выбор методов очень зависим от решаемой задачи.


 
xtreme   (2003-04-01 15:11) [8]

Всем спасибо. Понятно куда двигаться..

To: Zemal
Это верно. С потоками я раньше не работал. Но дело в том, что я вчера был в 3-х наиболее крупных московских магазинах, но ничего по потокам там не нашел. Готового кода я не ждал. Я ждал указаний на верный путь :) их я получил с лихвой :)

С Уважением,
Игорь.


 
VaS ©   (2003-04-01 16:14) [9]

>Только запомни правило.Два независимых(читай одиноковых) потока >синхронизируються мьютексами, птоки с отношением >главный/подчиненны - критическими секциями, если возможен >конфликт по ресурсам используй семафор.. Про все это читай в >Тексейре и Пачеко

Мама дарагая :(

Кр. секции и Interlocked-функции - для синхронизации потоков в рамках одного процесса. Мьютексы, события, семафоры, жд.таймеры - для межпроцессной синхронизации.


 
Digitman ©   (2003-04-01 16:50) [10]


> VaS © (01.04.03 16:14)


ну это уж слишком категорично)



> Кр. секции и Interlocked-функции - для синхронизации потоков
> в рамках одного процесса


безусловно - так !


> Мьютексы, события, семафоры, жд.таймеры - для межпроцессной
> синхронизации.


в том числе (и в 1-ю очередь) - да ... но порой без них никак не обойтись и для внутрипоточной синхронизации


 
VaS ©   (2003-04-01 17:06) [11]

Digitman: Абсолютно согласен. Просто у народа каша в голове :))


 
Digitman ©   (2003-04-01 17:28) [12]


> VaS


эт точно))
(с) Верещагин П.А.



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-44379
Intell
2003-03-26 08:12
2003.04.14
Высокоточный компонент Timer


7-44469
BJValentine
2003-02-18 17:05
2003.04.14
DLL


8-44280
__Alx__
2003-01-11 15:06
2003.04.14
Как работать с большим изображением?


14-44347
Val
2003-03-25 16:18
2003.04.14
Реконструкция крушения американского вертолета


7-44461
alexrush
2003-02-14 18:47
2003.04.14
Написание DeviceDriver`ов NT c TService