INtimeドキュメンタリトップへ

NT側グラフ表示アプリケーション

10月29日・・・ログ出力スレッド

最後にログ出力スレッドを作成しました。ログスレッドのシーケンスとして、ファイル名を生成後、スレッド開始時に同名ファイルの有無を確認し、存在する場合は削除します。
ヘッダ部分をファイル出力し、ファイルをクローズ。その後はデータを受ける毎にファイルをアペンドモードで開き、データを追加します。システムの終了時、ファイルポインタがNULL以外の場合、ファイルをクローズし、終了します。


ソースコード上:

void LogThread(void)
{
    WORD		wActual;
    BYTE		byMessage[128];
    WORD		*valData;
    /*	ファイル名取得	*/
    GetFileName(fileName);
	
    /*	すでに存在しているログファイルを削除する	*/
    remove( fileName ); 
	
    /*	ログファイルオープン	*/
    fpLog = fopen(fileName,"w");
    if( fpLog == NULL){
         WriteErrorProc(1);  /*	オープンエラー処理	*/
    }

    /*	ログファイル出力  見出し1 */
    if(fprintf(fpLog, "   CH0     1   2   3   4   5   6  7\n") < 0){
		WriteErrorProc(2);	/*	書き込みエラー処理	*/
	}

    /*	ログファイル出力  見出し2 */
    if( fprintf(fpLog, "----------------------------\n") < 0){
        WriteErrorProc(2);  /*	書き込みエラー処理	*/
    }

    fclose(fpLog);

    while (1) {
         //ログファイルアペンドモードで開く
         fopen(fileName,"a+");
         valData = (WORD*)byMessage;
         /*アナログデータ取り込みスレッド、または擬似データ作成スレッドよりデータ
           型メールボックスにてデータを受信 */
         wActual	= ReceiveRtData(strInfo.hParamMBox, valData
                    , WAIT_FOREVER);
		
         if (wActual == 0)
                 /* エラーチェック:データバイト数 0BYTE 時 */
                 Fail("ログデータ取得エラー");
         //ログファイルの書き込み
         if(fprintf(fpLog,"  %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d\n",
                    valData[0],valData[1],valData[2],valData[3],
                    valData[4],valData[5],valData[6],valData[7]) < 0)
                       WriteErrorProc(2);   /*	書き込みエラー処理	*/

         fclose(fpLog);
    }
}
アプリケーションの終了時、ファイルポインタがNULLでない場合:

    if ( fpLog != NULL )
         fclose(fpLog );
    fpLog = NULL;

ファイルを閉じてアプリケーションを終了する。
   


※TenAsys®, INtime®, eVM® and iRMX® are registered trademarks in USA of the TenAsys Corporation.