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

Вниз

ProcessMessages   Найти похожие ветки 

 
BiN ©   (2006-11-02 17:15) [80]


> YuRock ©   (02.11.06 17:09) [79]
>
>
> Не только. TThread.FSynchronizeException еще очень большое
> значение имеет в этом контексте...

И какое же значение?


 
Сергей М. ©   (2006-11-02 17:19) [81]


> YuRock ©   (02.11.06 17:09) [79]


Не надо тут уже лепить про атомарность операций ввода/вывода рпо отношению к операндам размером в 1 байт.

Сто раз обсуждалось.

Облажаешься - не отмоешься.


 
YuRock ©   (2006-11-02 17:34) [82]


> И какое же значение?


Не меньшее, чем SizeOf(Boolean)


> Не надо тут уже лепить про атомарность операций ввода/вывода
> рпо отношению к операндам размером в 1 байт.


Вот метод TThread.Destroy, который вызывается в другом потоке:
destructor TThread.Destroy;
begin
 if (FThreadID <> 0) and not FFinished then
 begin
   Terminate;
...
end;


Думаешь, размер FThreadID 1 байт?


> Облажаешься - не отмоешься.


Это не всегда и не по всем заметно... почему-то...


 
Eraser ©   (2006-11-02 19:28) [83]

> [76] YuRock ©   (02.11.06 16:59)

где одновременное использование?

> [82] YuRock ©   (02.11.06 17:34)


> Думаешь, размер FThreadID 1 байт?

метод Destroy выполняется в основном потоке, FThreadID устанавливается тоже в основном потоке. Свойство ThreadID только для чтения, так что никаких конфликтов быть не должно.
Да и, мягко говоря, не удачный ты класс для примера выбрал.. TThread специально спроектирован для работы с доп. потоками, поэтому тут узких мест быть не должно.


 
Eraser ©   (2006-11-02 19:39) [84]

> метод Destroy выполняется в основном потоке

поправочка OnTerminate, т.е. откуда возможен доступ к полям объекта.


 
YuRock ©   (2006-11-02 19:44) [85]


> Eraser ©   (02.11.06 19:28) [83]


Ну так я его именно потому и выбрал :)
А свойство ThreadID, значит, нельзя использовать в коде потока?

Ладно с этим методом. Просто прозвучало утверждение: "Обращения ко всем переменные, использующиеся в разных потоках, обязательно надо синхронизировать, иначе буду AV, зависания и т.д.".

Ну хорошо. Синхронизируем. Перед использованием, скажем, некой переменной пишем:


 EnterCriticalSection( CS );
 //...


И получаем использование переменной CS (как минимум чтение) в разных потоках.

Так вот, меня интересует простой вопрос - зачем вводить в заблуждение читателей форума?


 
YuRock ©   (2006-11-02 19:45) [86]


> Eraser ©   (02.11.06 19:39) [84]
> > метод Destroy выполняется в основном потокепоправочка
> OnTerminate, т.е. откуда возможен доступ к полям объекта.
>


Метод Destroy может выполняться в любом потоке.


 
Eraser ©   (2006-11-02 19:50) [87]

> [85] YuRock ©   (02.11.06 19:44)

пока что в заблуждение всех вводишь ты.

> Обращения ко всем переменные, использующиеся в разных потоках,
> обязательно надо синхронизировать, иначе буду AV, зависания
> и т.д.

ты с этим не соглсен?

из всех правил есть исключения, но это не значит, что нужно игнорировать правила.


 
Eraser ©   (2006-11-02 19:51) [88]

> [86] YuRock ©   (02.11.06 19:45)

согласен, в [84] я себя поправил.


 
YuRock ©   (2006-11-02 19:58) [89]


> ты с этим не соглсен?из всех правил есть исключения, но
> это не значит, что нужно игнорировать правила.


Это не правила. Это логика программ. При чем тут исключения из правил.


> согласен, в [84] я себя поправил.


Я другое имел ввиду. Ты написал, что Destroy вызывается из основного потока, а на самом деле его можно вызывать из какого-угодно.


 
Eraser ©   (2006-11-02 20:07) [90]

> [89] YuRock ©   (02.11.06 19:58)


> Ты написал, что Destroy вызывается из основного потока

вот это я и поправил, имелось ввиду OnTerminate.

> Это логика программ

логика программ в том, что TThread спроектирован для работы в разных потоках, а TApplication - нет.



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

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

Наверх




Память: 0.62 MB
Время: 0.035 c
15-1171562699
default
2007-02-15 21:04
2007.03.11
Кто писал программы наподобие ERwin и Rational Rose


2-1171709024
Trible
2007-02-17 13:43
2007.03.11
проблема с TShellTreeView


2-1172052044
Атех
2007-02-21 13:00
2007.03.11
Один class = несколько unit ов


2-1171965546
Cara
2007-02-20 12:59
2007.03.11
OpenDialog


4-1160470572
AlexT1000
2006-10-10 12:56
2007.03.11
Запрет запуска приложений. Как реализовать?