![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Наименьшее значение Handle. [D7, XP]
Новичек © (2006-01-11 13:44:00)Кто-нибудь знает, какое минимальное значение может принять Handle (без учета зарезервированных значений)?
evvcom (2006-01-11 16:53:00) [1]On Windows, BeginThread returns the Windows thread handle. A return value of 0 indicates failure.
Anatoly Podgoretsky (2006-01-11 16:37:00) [2]function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord; var ThreadId: LongWord): Integer;
Digitman (2006-01-11 15:46:00) [3]На кой ляд здесь семафор - ума не приложу.
Хэндл объекта-треда как раз и есть хэндл того самого объекта синхронизации, что допустим в кач-ве параметра в ф-циях синхронизации
Новичек (2006-01-11 15:44:00) [4]
> Digitman
Да, я пользовался семафором, а лень предложила поискать другой вариант :-)
Digitman (2006-01-11 15:43:00) [5]
> Как я мог забыть эту функцию?
Не столь это страшно .. чревато лишь утечками ресурсов ..
Важней другое - тебе, очевидно, требуется определить момент завершения работы трэд-функции, а это как раз и делается "по старинке", с помощью ф-ций синхронизации
Johnmen (2006-01-11 15:34:00) [6]>Новичек © (11.01.06 15:13) [18]
> THandleis the type for handles to operating system resources.
Ты же спрашивал про Handle ! А не про THandle !
Новичек (2006-01-11 15:20:00) [7]
> Digitman
> CloseHandle, кроме всего прочего, как раз и выполняет декремент
> сч-ка ссылок на ОС-объект (в т.ч. и трэд).
Как я мог забыть эту функцию?!!! Ну, сударь, спасибо! Будете в Новороссийске - с меня пиво.
Digitman (2006-01-11 15:16:00) [8]
> думал, что при вызове EndThread SomeHandle изменяется
Думать нужно после внимательного прочтения документации.
> Он остается прежним
С какого перепугу содержимое переменной SomeHandle изменится ?
Что ты туда записал, то там и будет лежать вплоть до момента пока ты не запишешь туда новое значение.
А значение хэндла у тебя там лежит или что-то другое - по-барабану.
> Придется по старинке делать
Не "по старинке", а как положено - с использованием ф-ций синхронизации и закрытием хэндла по завершению работы трэда.
Завершение же работы трэда вовсе не означает "смерть" его как объекта - этот объект продолжает существовать вплоть до уменьшения сч-ка ссылок на него до нуля... CloseHandle, кроме всего прочего, как раз и выполняет декремент сч-ка ссылок на ОС-объект (в т.ч. и трэд).
Новичек (2006-01-11 15:13:00) [9]
> Johnmen
THandle is the type for handles to operating system resources.
Unit
System
Delphi syntax:
type THandle = LongWord;
Description
THandle is a 32-bit value that uniquely identifies a resource.
----------------------------------------------------------
Fundamental integer types include Shortint, Smallint, Longint, Int64, Byte, Word, and Longword.
Fundamental integer types
Type Range Format
Shortint -128..127 signed 8-bit
Smallint -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit
Int64 -2^63..2^63-1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
Johnmen (2006-01-11 15:06:00) [10]>Новичек © (11.01.06 14:56) [16]
Где про это написано? :)
А указанная ф-ия возвращает integer.
Новичек (2006-01-11 14:56:00) [11]
> Digitman
Я и сам думал, что при вызове EndThread SomeHandle изменяется. Оказалось - не тут-то было! Он остается прежним! Блин... Развел дискуссию, а зря... Придется по старинке делать.
> Johnmen
Handle не может быть отрицательным.
Игорь Шевченко (2006-01-11 14:54:00) [12]
> какое минимальное значение может принять Handle
4
Johnmen (2006-01-11 14:49:00) [13]>Новичек © (11.01.06 14:44) [12]
–2147483648
Digitman (2006-01-11 14:48:00) [14]
> Новичек © (11.01.06 14:44) [12]
Ну и где из приведенного фрагмента кода видно, когда и при каких обстоятельствах значение SomeHadle станет меньшим или равным значению MinValue ?
Новичек (2006-01-11 14:44:00) [15]
> Digitman
SomeHandle := BeginThread(nil, 0, @SomeFunction, nil, 0, idThread);
while SomeHadle > MinValue do Application.ProcessMessages;
Digitman (2006-01-11 14:41:00) [16]
> строчкой типа
> while SomeHadle > MinValue do Application.ProcessMessages;
>
> IMHO, удобней
Блажь какая-то ..
Ну и куда сей шедевр программерской мысли вставить ?
Продемонстрируй хотя бы в псевдокоде, чтобы можно было понять, в какой момент и при каких твоих действиях выполнится условие SomeHadle <= MinValue
Новичек (2006-01-11 14:38:00) [17]
> Digitman
Лень. А строчкой типа
while SomeHadle > MinValue do Application.ProcessMessages;
IMHO, удобней :-)
Digitman (2006-01-11 14:32:00) [18]
> Новичек © (11.01.06 14:27) [8]
> извращенным методом
Непосредственным доступом к таблицам дескрипторов что ли ?
А без извращений - это уже не модно ? Или как ?)
Новичек (2006-01-11 14:27:00) [19]
> Digitman
Например, для отслеживания существования объекта извращенным методом :-)
Digitman (2006-01-11 14:24:00) [20]
> Новичек © (11.01.06 14:22) [6]
и зачем знание этого может понадобиться ?