○アプリケーション終了時になにか処理をする

プログラム中のexit()や、ウィンドウの×ボタンを押した場合でも、実行されます


■プログラムが普通に終了した時に呼び出される LIFOバッファに関数を登録

atexit (quit);//アプリケーション終了時に呼び出される関数を登録


//アプリケーションの終了
void quit(void){ 
	int i;
	for(i=0;i<3;i++){//なにか重い処理をさせてみる
		printf("%d\n",i);
		sleep(1);
	}
	XtDestroyWidget(top);//ウィジットを破棄する
}



■プログラム


#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>


Widget top, form;

//アプリケーションの終了
void quit(void){ 
	int i;
	for(i=0;i<3;i++){//なにか重い処理をさせてみる
		printf("%d\n",i);
		sleep(1);
	}
	XtDestroyWidget(top);//ウィジットを破棄する
}

//ボタンが押された時の動作
void Button1Callback( Widget w, XtPointer client, XtPointer called )
{
	exit(0);
}


main( int argc, char **argv )
{
	XtAppContext app_context;

	top = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv, NULL,
	//XtNwidth,500,
	//XtNheight,500,
	NULL);


	form = XtVaCreateManagedWidget("form",formWidgetClass,top,NULL);

	//ボタンの作成
	Widget button1 = XtVaCreateManagedWidget("button1",//ウィジット名
					commandWidgetClass,//ボタンクラスを指定
					form,
					//リソースの直接入力(どんどん追加できる)
					XtNlabel,"quit",//表示される文字
					//XtNhorizDistance, 50,//開始位置
					//XtNvertDistance,55,
					XtNwidth,100,//幅と高さ
					XtNheight,20,
					XtNborderWidth,1,//境界線
					//リソースここまで
					NULL);

	XtAddCallback(button1, XtNcallback,Button1Callback, NULL );//ボタンのコールバック関数を登録

	atexit (quit);//アプリケーション終了時に呼び出される関数を指定
	
	XtRealizeWidget( top );
	XtAppMainLoop( app_context );
}








▲トップページ > Linux と C