На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Fibers



A fiber is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them. Each thread can schedule multiple fibers. In general, fibers do not provide advantages over a well-designed multithreaded application. However, using fibers can make it easier to port applications that were designed to schedule their own threads.

From a system standpoint, a fiber assumes the identity of the thread that created it. For example, if a fiber accesses thread local storage (TLS), it is accessing the thread local storage of the thread that created it. In addition, if a fiber calls the ExitThread function, the thread that created it exits. However, a fiber does not have all the same state information associated with it as that associated with a thread. The only state information maintained for a fiber is its stack, a subset of its registers, and the fiber data provided during fiber creation. The saved registers are the set of registers typically preserved across a function call.

Fibers are not preemptively scheduled. You schedule a fiber by switching to it from another fiber. The system still schedules threads to run. When a thread running fibers is preempted, its currently running fiber is preempted. The fiber runs when its thread runs.
Before scheduling the first fiber, call the ConvertThreadToFiber function to create an area in which to save fiber state information. The calling thread is now the currently executing fiber. The stored state information for this fiber includes the fiber data passed as an argument to ConvertThreadToFiber.

The CreateFiber function is used to create a new fiber from an existing fiber; the call requires the stack size, the starting address, and the fiber data. The starting address is typically a user-supplied function, called the fiber function, that takes one parameter (the fiber data) and does not return a value. If your fiber function returns, the thread running the fiber exits. To execute any fiber created with CreateFiber, call the SwitchToFiber function. You can call SwitchToFiber with the address of a fiber created by a different thread. To do this, you must have the address returned to the other thread when it called CreateFiber and you must use proper synchronization.

A fiber can retrieve the fiber data by calling the GetFiberData function. A fiber can retrieve the fiber address at any time by calling the GetCurrentFiber function.
To clean up the data associated with a fiber, call the DeleteFiber function. You must take care when calling DeleteFiber. If you call DeleteFiber for a fiber created by another thread, you can cause the other thread to terminate abnormally. If DeleteFiber is called from the currently running fiber, its thread calls ExitThread.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Волокна



Волокно является устройством выполнения, которое должно вручную быть запланировано приложением. Прогон Волокон в контексте резьбы, который планирует им. Каждая резьба может запланировать многочисленные волокна. В общих чертах, волокна не обеспечивают преимущества над хорошо-разработанное multithreaded приложение. Тем не менее, использование волокон может сделать это легче, чтобы переносить приложения, которые были предназначены планировать свою собственную резьбу.

Из системной позиции, волокно принимает тождество резьбы, что создавшее это. Например, если волокно имеет доступ к локальному хранению резьбы (TLS), оно получает локальное хранение резьбы резьбы, что создавшее это. Кроме того, если волокно называет функцию ExitThread, резьба, что созданное это выходит. Тем не менее, волокно нет связало тем не менее государственную информацию с ним как, что связывался с резьбой. Единственная государственная информация поддержанная для волокна - стек, подмножество своих регистров, и волоконные данные предусматривались в течение волоконного создания. Сохраненные регистры являются установкой регистров обычно сохраненных через функциональный вызов.

Волокна упреждающо не запланированы. Вы планируете волокно переключая, чтобы это из другого волокна. Системная неподвижная резьба расписаний, чтобы работать. Когда резьба, выполняющая волокна захвачена, к настоящему времени прогон волокна захвачен. Волокно работает когда резьба работает.
Перед планированием первого волокна, назовите функцию ConvertThreadToFiber, чтобы создавать область, чтобы сохранять волоконную государственную информацию. Вызывающая резьба является теперь к настоящему времени выполняющим волокном. Загруженная государственная информация для этого волокна включает волоконные данные пройденные как аргумент на ConvertThreadToFiber.

Функция CreateFiber использована, чтобы создавать новое волокно из существующего волокна; вызов требует размер стека, запуск адреса, и волоконные данные. Стартовый адрес является обычно поставленной функцией пользователя, назвавшей волоконную функцию, которая берет один параметр ( волоконные данные) и не возвращает величину. Если ваша волоконная функция возвращается, резьба, выполняющая волоконные выходы. Для того, чтобы выполнять любое волокно созданное CreateFiber, назовите функцию SwitchToFiber. Вы можете назвать SwitchToFiber с адресом волокна созданного другой резьбой. Чтобы делать это, Вы должны возвращать адрес в другую резьбу когда названо CreateFiber и Вы должны использовать соответствующую синхронизацию.

Волокно может извлечь волоконные данные вызывая функцию GetFiberData. Волокно может извлечь волоконный адрес в любое время вызывая функцию GetCurrentFiber.
Для того, чтобы наводить порядок данные связанные волокном, назовите функцию DeleteFiber. Вы должны побыть осторожным при вызове DeleteFiber. Если Вы призываете DeleteFiber к волокну созданному другой резьбой, Вы можете заставить резьбу, чтобы завершаться ненормально. Если DeleteFiber назван из к настоящему времени прогона волокна, резьба называет ExitThread.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz