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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-44272
MaX1
2003-04-02 16:07
2003.04.14
Программа тестирования.


14-44392
quest1111
2003-03-27 10:03
2003.04.14
Акробатика в Unreal


3-44029
Андрю-ХА!
2003-03-25 18:39
2003.04.14
DBGrid + Scroll


3-44032
Roman_kv
2003-03-25 18:08
2003.04.14
OnChange на BDEdit когда он происходит?


1-44155
lex01
2003-04-03 16:00
2003.04.14
как получить значение ключа реестре





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