From 5c46fcf535af31d2ffe9534bc214b2710298cdf5 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 9 Dec 2009 19:13:10 +0000 Subject: [PATCH] 2009-12-09 20:11 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbwin/wapi_winbase.c + WAPI_WAITFORSINGLEOBJECT() + WAPI_WAITFORSINGLEOBJECTEX() + WAPI_WAITFORMULTIPLEOBJECT() + WAPI_WAITFORMULTIPLEOBJECTEX() Added new wrappers. Untested. --- harbour/ChangeLog | 8 +++++ harbour/contrib/hbwin/wapi_winbase.c | 53 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 29de8429ce..8396ddab3f 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,14 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-12-09 20:11 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * contrib/hbwin/wapi_winbase.c + + WAPI_WAITFORSINGLEOBJECT() + + WAPI_WAITFORSINGLEOBJECTEX() + + WAPI_WAITFORMULTIPLEOBJECT() + + WAPI_WAITFORMULTIPLEOBJECTEX() + Added new wrappers. Untested. + 2009-12-09 19:36 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbqt/Makefile * contrib/hbqt/hbqt.ch diff --git a/harbour/contrib/hbwin/wapi_winbase.c b/harbour/contrib/hbwin/wapi_winbase.c index 21b134c47a..5e6f462953 100644 --- a/harbour/contrib/hbwin/wapi_winbase.c +++ b/harbour/contrib/hbwin/wapi_winbase.c @@ -53,6 +53,7 @@ #define HB_OS_WIN_USED #include "hbapi.h" +#include "hbapierr.h" #include "hbwinuni.h" #include "hbwapi.h" @@ -76,6 +77,58 @@ HB_FUNC( WAPI_GETCURRENTTHREAD ) wapi_ret_HANDLE( GetCurrentThread() ); } +HB_FUNC( WAPI_WAITFORSINGLEOBJECT ) +{ + hb_retnl( WaitForSingleObject( wapi_par_HANDLE( 1 ), ( DWORD ) hb_parnl( 2 ) ) ); +} + +HB_FUNC( WAPI_WAITFORSINGLEOBJECTEX ) +{ + hb_retnl( WaitForSingleObjectEx( wapi_par_HANDLE( 1 ), ( DWORD ) hb_parnl( 2 ), hb_parl( 3 ) ) ); +} + +HB_FUNC( WAPI_WAITFORMULTIPLEOBJECT ) +{ + PHB_ITEM pArray = hb_param( 2, HB_IT_ARRAY ); + HB_SIZE nLen = pArray ? hb_arrayLen( pArray ) : 0; + + if( nLen > 0 && nLen <= MAXIMUM_WAIT_OBJECTS ) + { + HANDLE * handles = ( HANDLE * ) hb_xgrab( nLen * sizeof( HANDLE ) ); + HB_SIZE nPos; + + for( nPos = 0; nPos < nLen; ++nPos ) + handles[ nPos ] = hb_arrayGetPtr( pArray, nPos + 1 ); + + hb_retnl( WaitForMultipleObjects( nLen, handles, hb_parl( 3 ), ( DWORD ) hb_parnl( 4 ) ) ); + + hb_xfree( handles ); + } + else + hb_errRT_BASE( EG_ARG, 1001, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +HB_FUNC( WAPI_WAITFORMULTIPLEOBJECTEX ) +{ + PHB_ITEM pArray = hb_param( 2, HB_IT_ARRAY ); + HB_SIZE nLen = pArray ? hb_arrayLen( pArray ) : 0; + + if( nLen > 0 && nLen <= MAXIMUM_WAIT_OBJECTS ) + { + HANDLE * handles = ( HANDLE * ) hb_xgrab( nLen * sizeof( HANDLE ) ); + HB_SIZE nPos; + + for( nPos = 0; nPos < nLen; ++nPos ) + handles[ nPos ] = hb_arrayGetPtr( pArray, nPos + 1 ); + + hb_retnl( WaitForMultipleObjectsEx( nLen, handles, hb_parl( 3 ), ( DWORD ) hb_parnl( 4 ), hb_parl( 5 ) ) ); + + hb_xfree( handles ); + } + else + hb_errRT_BASE( EG_ARG, 1001, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + HB_FUNC( WAPI_SETPROCESSWORKINGSETSIZE ) { #if ! defined( HB_OS_WIN_CE )