![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объекты сигнального типа...
Cyrax © (2006-11-21 12:35:00)Первым параметром функции WaitForSingleObject передаётся дескриптор ресурса типа HANDLE:
DWORD WaitForSingleObject(
HANDLE hObject,
DWORD dwTimeot
);
По смыслу объект должен быть сигнального типа (событие, мьютекс, критическая секция и др.). Но что произойдёт, если передать функции дескриптор, скажем, файла (или это тоже объект сигнального типа - открыт/закрыт ?) или потока (это уже точно не объект сигнального типа) ? Дескрипторы то у них у всех одного системного типа - HANDLE...
Сергей М. (2006-11-24 14:36:00) [1]
> MikePetrichenko © (24.11.06 14:18) [21]
Что там пробовать-то ?)
Все уже давно "опробовано")
Рекомендую тебе дальше не продолжать, ибо облажаешься по полной программе)
MikePetrichenko (2006-11-24 14:18:00) [2]
> файл не будет, сокет не будет
А ты попробуй.
Сергей М. (2006-11-24 08:33:00) [3]
> MikePetrichenko © (24.11.06 03:33) [19]
> Ну, например при коннекте, поступлении данных.
> Только не нужно сейчас рассказывать, что там пользуется
> событие отдельно и т.п
Ну и к чему ты тогда вся эта бодяга - "объект ядра", "не объект ядра" ?)
И ежу понятно, что все перечисленное выше относится к ядреным объектам, подавляющее большинство из них способно "сигналить", прямо или косвенно.
Но вопрос-то был проще пареной репы - будет ли "сигналить" некий конкретный объект, если его употребить в ф-ции ожидания непосредственно!
И ответ столь же простой - файл небудет, сокет небудет ... А будут только те, что перечислены в [11].
Я, кстати, тоже был не прав, утверждая насчет отказа ф-ции ожидания - ф-ция с успехом "проглотит" любой из ядреных хэндлов, но работать ожидаемым образом будет лишь в перечисленных в msdn случаях.
MikePetrichenko (2006-11-24 03:33:00) [4]
> И при каких же событиях этот объект должен сигналить ?
Ну, например при коннекте, поступлении данных.
Только не нужно сейчас рассказывать, что там пользуется событие отдельно и т.п. При работе с вайлами в Overlapped в WaitForXXX тоже не сам Handle файла передается. Однакож файлы относятся к объектам ядра.
> MSDN(тема - Synchronization Objects).
Открыл. И что:
The six multithreaded classes provided with MFC fall into two categories: synchronization objects (CSyncObject,CSemaphore,CMutex,CCriticalSection, andCEvent) and synchronization access objects (CMultiLock andCSingleLock).
Synchronization classes are used when access to a resource must be controlled to ensure integrity of the resource. Synchronization access classes are used to gain access to these controlled resources. This article describes when to use each class.
To determine which synchronization class you should use, ask the following series of questions:
Does the application have to wait for something to happen before it can access the resource (for example, data must be received from a communications port before it can be written to a file)?
If yes, use CEvent.
Can more than one thread within the same application access this resource at one time (for example, your application allows up to five windows with views on the same document)?
If yes, use CSemaphore.
Can more than one application use this resource (for example, the resource is in a DLL)?
If yes, use CMutex.
If no, use CCriticalSection.
CSyncObject is never used directly. It is the base class for the other four synchronization classes.
Alexander Panov (2006-11-23 14:58:00) [5]
> > "объекты синхронизации".Event, Mutex, Critical Section,
> Semaphore. Все. Больше объектов синхронизации нет. RTFM.
>
Я рекомендую обратиться к первоисточнику - MSDN(тема - Synchronization Objects).
Как это ни прискорбно, некторые из головы любят выдумать и сказать, не проверив себя.
И сбавь тон. Здесь не лекторий.
Сергей М. (2006-11-23 09:44:00) [6]
> MikePetrichenko © (23.11.06 09:02) [15]
И при каких же событиях этот объект должен сигналить ?
MikePetrichenko (2006-11-23 09:08:00) [7]
> "объекты синхронизации".
Event, Mutex, Critical Section, Semaphore. Все. Больше объектов синхронизации нет. RTFM.
Все остальное - объекты ядра либо GDI.
MikePetrichenko (2006-11-23 09:02:00) [8]
> ?
Что не понятно?
Socket - объект ядра, который может быть передан в функции WatForXXX.
Читать WinSock API до просветления.
Сергей М. (2006-11-23 08:58:00) [9]
> MikePetrichenko © (22.11.06 18:08) [13]
> А также:
> Socket
?
MikePetrichenko (2006-11-22 18:08:00) [10]
> Alexander Panov ©
А также:
File
Pipe
Mail slot
Socket
Driver Object
и многое другое....
Еще раз повторю. Все объекты ядра. Хватит заниматься гаданиями на кофейной гуще. Прочтите наконец литературу.
Alexander Panov (2006-11-22 17:38:00) [11]Точнее будет сказать не "синализирующие объекты", а "объекты синхронизации".
Alexander Panov (2006-11-22 17:37:00) [12]Объекты, которые могут сигнализировать:
- Change notification
- Console input
- Event
- Job
- Memory resource notification
- Mutex
- Process
- Semaphore
- Thread
- Waitable timer
MikePetrichenko (2006-11-22 14:54:00) [13]
> Т.е. и потоки, и файлы, и консоль ввода... (всё это объекты
> ядра...)
Да.
> Т.е. как API функция определяет по дескриптору "сигнальность"
> объекта ?
Ну когда вы в конце концов будете читать то, что вам советуют.
У Рихтера все это расписано от и до.
Также почитай "Секреты Windows". Не помню кто написал. Там про ядро и про все остальное. Очень интересно.
RWolf (2006-11-22 13:25:00) [14]
> Help в Delphi ? По API-функциям ??
Весьма толковый, кстати.
Cyrax (2006-11-22 13:13:00) [15]MikePetrichenko © (22.11.06 00:23) [7]
Функции WaitForxxx принимают в качестве параметра описатели (Handle) объектов ядра.
Т.е. и потоки, и файлы, и консоль ввода... (всё это объекты ядра...)
MikePetrichenko (2006-11-22 00:23:00) [16]Функции WaitForxxx принимают в качестве параметра описатели (Handle) объектов ядра.
За подробностями к Рихтеру.
Cyrax (2006-11-21 23:00:00) [17]Virgo_Style © (21.11.06 22:54) [5]
Т.е. как API функция определяет по дескриптору "сигнальность" объекта ?
Alex Konshin © (21.11.06 13:04) [2]
Может, это прозвучит банально, но прочтите же наконец help!
Там все разжевано.
Help в Delphi ? По API-функциям ??
Virgo_Style (2006-11-21 22:54:00) [18]Cyrax © (21.11.06 22:27) [4]
Аналогично рассуждая, файл "сигналит" о своём освобождении
файлы не рассуждают, даже аналогично
Cyrax (2006-11-21 22:27:00) [19]Сергей М. © (21.11.06 12:39) [1]
Хэндл потока допустим как параметр ф-ции - поток "сигналит" о своем завершении.
Аналогично рассуждая, файл "сигналит" о своём освобождении (файл ни кем не используется)...
Cyrax (2006-11-21 13:07:00) [20]Удалено модератором
Примечание: Создание пустых сообщений