ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Guard/Guard.pm
(Generate patch)

Comparing Guard/Guard.pm (file contents):
Revision 1.9 by root, Sat Dec 13 18:49:22 2008 UTC vs.
Revision 1.11 by root, Sat Dec 13 18:51:19 2008 UTC

107 107
108See the EXCEPTIONS section for an explanation of how exceptions 108See the EXCEPTIONS section for an explanation of how exceptions
109(i.e. C<die>) are handled inside guard blocks. 109(i.e. C<die>) are handled inside guard blocks.
110 110
111Example: acquire a Coro::Semaphore for a second by registering a 111Example: acquire a Coro::Semaphore for a second by registering a
112timer. The timer callback references the guard used to unlock it again. 112timer. The timer callback references the guard used to unlock it
113again. (Please ignore the fact that C<Coro::Semaphore> has a C<guard>
114method that does this already):
113 115
114 use Guard; 116 use Guard;
115 use AnyEvent; 117 use AnyEvent;
116 use Coro::Semaphore; 118 use Coro::Semaphore;
117 119
131 133
132The advantage of doing this with a guard instead of simply calling C<< 134The advantage of doing this with a guard instead of simply calling C<<
133$sem->down >> in the callback is that you can opt not to create the timer, 135$sem->down >> in the callback is that you can opt not to create the timer,
134or your code can throw an exception before it can create the timer, or you 136or your code can throw an exception before it can create the timer, or you
135can create multiple timers or other event watchers and only when the last 137can create multiple timers or other event watchers and only when the last
136one gets executed will the lock be unlocked. 138one gets executed will the lock be unlocked. Using the C<guard>, you do
139not have to worry about catching all the places where you have to unlock
140the semaphore.
137 141
138=item Guard::cancel $guard 142=item Guard::cancel $guard
139 143
140Calling this function will "disable" the guard object returned by the 144Calling this function will "disable" the guard object returned by the
141C<guard> function, i.e. it will free the BLOCK originally passed to 145C<guard> function, i.e. it will free the BLOCK originally passed to

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines