globus_callback.h

Go to the documentation of this file.
00001 /*
00002  * Copyright 1999-2006 University of Chicago
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #ifndef GLOBUS_CALLBACK_H
00018 #define GLOBUS_CALLBACK_H
00019 
00031 #include "globus_common_include.h"
00032 #include "globus_module.h"
00033 #include "globus_time.h"
00034 
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038 
00039 extern
00040 globus_module_descriptor_t       globus_i_callback_module;
00041 
00054 #define GLOBUS_CALLBACK_MODULE (&globus_i_callback_module)
00055 
00065 #define GLOBUS_POLL_MODULE GLOBUS_CALLBACK_MODULE
00066 
00078 typedef enum
00079 {
00081     GLOBUS_CALLBACK_ERROR_INVALID_CALLBACK_HANDLE = 1024,
00083     GLOBUS_CALLBACK_ERROR_INVALID_SPACE,
00085     GLOBUS_CALLBACK_ERROR_MEMORY_ALLOC,
00087     GLOBUS_CALLBACK_ERROR_INVALID_ARGUMENT,
00089     GLOBUS_CALLBACK_ERROR_ALREADY_CANCELED,
00091     GLOBUS_CALLBACK_ERROR_NO_ACTIVE_CALLBACK
00092 } globus_callback_error_type_t;
00093 
00102 typedef int                             globus_callback_handle_t;
00103 
00112 typedef int                             globus_callback_space_t;
00113 
00121 typedef struct globus_l_callback_space_attr_s * globus_callback_space_attr_t;
00122 
00133 /* @{ */
00134 
00146 #define globus_callback_poll(a)                                             \
00147     globus_callback_space_poll((a), GLOBUS_CALLBACK_GLOBAL_SPACE)
00148 
00160 #define globus_poll_blocking()                                              \
00161     globus_callback_poll(&globus_i_abstime_infinity)
00162 
00174 #define globus_poll_nonblocking()                                           \
00175     globus_callback_poll(&globus_i_abstime_zero)
00176 
00188 #define globus_poll()                                                       \
00189     globus_poll_nonblocking()
00190 
00201 #define globus_signal_poll()                                                \
00202     globus_callback_signal_poll()
00203 
00215 #define globus_callback_register_oneshot(                                   \
00216         callback_handle,                                                    \
00217         delay_time,                                                         \
00218         callback_func,                                                      \
00219         callback_user_arg)                                                  \
00220     globus_callback_space_register_oneshot(                                 \
00221         (callback_handle),                                                  \
00222         (delay_time),                                                       \
00223         (callback_func),                                                    \
00224         (callback_user_arg),                                                \
00225         GLOBUS_CALLBACK_GLOBAL_SPACE)
00226 
00238 #define globus_callback_register_periodic(                                  \
00239         callback_handle,                                                    \
00240         delay_time,                                                         \
00241         period,                                                             \
00242         callback_func,                                                      \
00243         callback_user_arg)                                                  \
00244     globus_callback_space_register_periodic(                                \
00245         (callback_handle),                                                  \
00246         (delay_time),                                                       \
00247         (period),                                                           \
00248         (callback_func),                                                    \
00249         (callback_user_arg),                                                \
00250         GLOBUS_CALLBACK_GLOBAL_SPACE)
00251 
00264 #define globus_callback_register_signal_handler(                            \
00265         signum,                                                             \
00266         persist,                                                            \
00267         callback_func,                                                      \
00268         callback_user_arg)                                                  \
00269     globus_callback_space_register_signal_handler(                          \
00270         (signum),                                                           \
00271         (persist),                                                          \
00272         (callback_func),                                                    \
00273         (callback_user_arg),                                                \
00274         GLOBUS_CALLBACK_GLOBAL_SPACE)
00275 
00276 /* @} */
00277 
00281 /* @{ */
00282 
00312 typedef
00313 void
00314 (*globus_callback_func_t)(
00315     void *                              user_arg);
00316 
00317 /* @} */
00318 
00322 /* @{ */
00323 
00357 globus_result_t
00358 globus_callback_space_register_oneshot(
00359     globus_callback_handle_t *          callback_handle,
00360     const globus_reltime_t *            delay_time,
00361     globus_callback_func_t              callback_func,
00362     void *                              callback_user_arg,
00363     globus_callback_space_t             space);
00364 
00365 /* @} */
00366 
00370 /* @{ */
00371 
00409 globus_result_t
00410 globus_callback_space_register_periodic(
00411     globus_callback_handle_t *          callback_handle,
00412     const globus_reltime_t *            delay_time,
00413     const globus_reltime_t *            period,
00414     globus_callback_func_t              callback_func,
00415     void *                              callback_user_arg,
00416     globus_callback_space_t             space);
00417 
00462 globus_result_t
00463 globus_callback_unregister(
00464     globus_callback_handle_t            callback_handle,
00465     globus_callback_func_t              unregister_callback,
00466     void *                              unreg_arg,
00467     globus_bool_t *                     active);
00468 
00496 globus_result_t
00497 globus_callback_adjust_oneshot(
00498     globus_callback_handle_t            callback_handle,
00499     const globus_reltime_t *            new_delay);
00500 
00533 globus_result_t
00534 globus_callback_adjust_period(
00535     globus_callback_handle_t            callback_handle,
00536     const globus_reltime_t *            new_period);
00537 /* @} */
00538 
00542 /* @{ */
00543 
00585 void
00586 globus_callback_space_poll(
00587     const globus_abstime_t *            timestop,
00588     globus_callback_space_t             space);
00589 
00608 void
00609 globus_callback_signal_poll();
00610 /* @} */
00611 
00615 /* @{ */
00616 
00635 globus_bool_t
00636 globus_callback_get_timeout(
00637     globus_reltime_t *                  time_left);
00638 
00652 globus_bool_t
00653 globus_callback_has_time_expired();
00654 
00672 globus_bool_t
00673 globus_callback_was_restarted();
00674 
00675 /* @} */
00676 
00693 #define GLOBUS_CALLBACK_GLOBAL_SPACE -2
00694 
00725 typedef enum
00726 {
00730     GLOBUS_CALLBACK_SPACE_BEHAVIOR_SINGLE,
00734     GLOBUS_CALLBACK_SPACE_BEHAVIOR_SERIALIZED,
00736     GLOBUS_CALLBACK_SPACE_BEHAVIOR_THREADED
00737 } globus_callback_space_behavior_t;
00738 
00764 globus_result_t
00765 globus_callback_space_init(
00766     globus_callback_space_t *           space,
00767     globus_callback_space_attr_t        attr);
00768 
00786 globus_result_t
00787 globus_callback_space_reference(
00788     globus_callback_space_t             space);
00789 
00813 globus_result_t
00814 globus_callback_space_destroy(
00815     globus_callback_space_t             space);
00816 
00834 globus_result_t
00835 globus_callback_space_attr_init(
00836     globus_callback_space_attr_t *      attr);
00837 
00852 globus_result_t
00853 globus_callback_space_attr_destroy(
00854     globus_callback_space_attr_t        attr);
00855 
00872 globus_result_t
00873 globus_callback_space_attr_set_behavior(
00874     globus_callback_space_attr_t        attr,
00875     globus_callback_space_behavior_t    behavior);
00876 
00896 globus_result_t
00897 globus_callback_space_attr_get_behavior(
00898     globus_callback_space_attr_t        attr,
00899     globus_callback_space_behavior_t *  behavior);
00900 
00913 globus_result_t
00914 globus_callback_space_get(
00915     globus_callback_space_t *           space);
00916 
00928 int
00929 globus_callback_space_get_depth(
00930     globus_callback_space_t             space);
00931 
00943 globus_bool_t
00944 globus_callback_space_is_single(
00945     globus_callback_space_t             space);
00946 
00947 
00962 #ifdef SIGINT
00963 #define GLOBUS_SIGNAL_INTERRUPT SIGINT
00964 #else
00965 #define GLOBUS_SIGNAL_INTERRUPT 0
00966 #endif
00967 
01003 globus_result_t
01004 globus_callback_space_register_signal_handler(
01005     int                                 signum,
01006     globus_bool_t                       persist,
01007     globus_callback_func_t              callback_func,
01008     void *                              callback_user_arg,
01009     globus_callback_space_t             space);
01010 
01035 globus_result_t
01036 globus_callback_unregister_signal_handler(
01037     int                                 signum,
01038     globus_callback_func_t              unregister_callback,
01039     void *                              unreg_arg);
01040 
01068 void
01069 globus_callback_add_wakeup_handler(
01070     void                                (*wakeup)(void *),
01071     void *                              user_arg);
01072 
01073 #ifdef __cplusplus
01074 }
01075 #endif
01076 
01077 #endif /* GLOBUS_CALLBACK_H */

Generated on 20 Jun 2015 for globus_common by  doxygen 1.4.7