Текущий архив: 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