Windows版 iTRONサービスコールの作成 (時間管理機能)
(その7)

アラーム・ハンドラを起動または停止する

アラーム・ハンドラを起動または停止するサービスコールは以下のとおりです。


サービスコール名説明
sta_alm

アラーム・ハンドラを起動します。

stp_alm

アラーム・ハンドラを停止します。

※ アラーム・ハンドラの起動および停止はVer4.0でのみサポートされます。

アラーム・ハンドラを起動する (Ver4.0のみ)

アラーム・ハンドラを起動するには以下のサービスコールを使用します。



    ER sta_alm( ID almid, RELTIM almtim )
	

引数説明
almid

アラーム・ハンドラID番号。

almtim

アラーム・ハンドラの起動時刻。

戻り値説明
E_OK

正常終了。

E_ID

範囲外のアラーム・ハンドラID番号。

E_NOEXS

指定したアラーム・ハンドラID番号は登録されていない。


・サービスコールのソースコードは以下のようになります。


/****************************************************************************/
/*!
 *  @brief  アラーム・ハンドラの起動.
 *
 *  @param  [in]    almid   アラーム・ハンドラID番号.
 *
 *  @retval エラーコード.
 */
ER      sta_alm( ID almid, RELTIM almtim )
{
    ER ercd;

    wi_CommonLock();

    //! アラーム・ハンドラを起動する.
    ercd = wi_StartAlarmHadler( almid, ((DWORDLONG)(almtim.utime) << 32) + (DWORDLONG)(almtim.ltime) );

    wi_CommonUnlock();
    return ercd;
}
    

アラーム・ハンドラの起動関数

アラーム・ハンドラの起動関数のソースコードは以下のとおりです。



/****************************************************************************/
/*!
 *  @brief  アラーム・ハンドラの起動.
 *
 *  @param  [in]    no      アラーム・ハンドラ番号.
 *  @param  [in]    almtim  起動時刻.
 *
 *  @retval エラーコード.
 */
ER      wi_StartAlarmHadler( INT no, DWORDLONG almtim )
{
    ER          ercd;
    WIALMOBJ    *p;

    //! アラーム・ハンドラ番号のオブジェクトを取得する.
    p = (WIALMOBJ *)wi_FindObject( no, TMAX_MAXALM, ObjList, &ercd );
    if( !p ){
        return ercd;
    }
    //! アラーム・ハンドラの起動時刻を現在時刻からの相対時刻でセットする.
    p->AlmTime = wi_GetSystemTime() + almtim;

    //! アラーム・ハンドラの動作状態を「起動中」にする.
    p->Active  = TRUE;

    return E_OK;
}
	

アラーム・ハンドラの起動関数は以下のような処理を行います。

  • 引数で指定されたアラーム・ハンドラ番号に該当するアラーム・ハンドラ・オブジェクトを取り出します。
  • 現在時刻を取得してアラーム・ハンドラの起動時刻を現在時刻からの相対時刻で計算します。
  • アラーム・ハンドラの動作状態を「起動中」にして処理を終了します。

アラーム・ハンドラを停止する (Ver4.0のみ)

アラーム・ハンドラを停止するには以下のサービスコールを使用します。



    ER stp_alm( ID almid )
	

引数説明
almid

アラーム・ハンドラID番号。

戻り値説明
E_OK

正常終了。

E_ID

範囲外のアラーム・ハンドラID番号。

E_NOEXS

指定したアラーム・ハンドラID番号は登録されていない。


・サービスコールのソースコードは以下のようになります。


/****************************************************************************/
/*!
 *  @brief  アラーム・ハンドラの停止.
 *
 *  @param  [in]    almid   アラーム・ハンドラID番号.
 *
 *  @retval エラーコード.
 */
ER      stp_alm( ID almid )
{
    ER ercd;

    wi_CommonLock();

    //! アラーム・ハンドラを停止する.
    ercd = wi_StopAlarmHadler( almid );

    wi_CommonUnlock();
    return ercd;
}
	

アラーム・ハンドラの停止関数

アラーム・ハンドラの停止関数のソースコードは以下のとおりです。



/****************************************************************************/
/*!
 *  @brief  アラーム・ハンドラの停止.
 *
 *  @param  [in]    no      アラーム・ハンドラ番号.
 *
 *  @retval エラーコード.
 */
ER      wi_StopAlarmHadler( INT no )
{
    ER          ercd;
    WIALMOBJ    *p;

    //! アラーム・ハンドラ番号のオブジェクトを取得する.
    p = (WIALMOBJ *)wi_FindObject( no, TMAX_MAXALM, ObjList, &ercd );
    if( !p ){
        return ercd;
    }
    //! アラーム・ハンドラの動作状態を「停止中」にする.
    p->Active = FALSE;
    return E_OK;
}
	

アラーム・ハンドラの停止関数は以下のような処理を行います。

  • 引数で指定されたアラーム・ハンドラ番号に該当するアラーム・ハンドラ・オブジェクトを取り出します。
  • アラーム・ハンドラの動作状態を「停止中」にして処理を終了します。


Windowsは米国Microsoft Corporationの登録商標です。