AZ-Prolog Version 6は、この度、本格的な64ビット・マルチコアCPUに対応したバージョンを提供します。


[掲示板に戻る全部  1-  最新50
1 CTRL+C が効かない原因
sasagawa 2011-6-11 7:19  [返信] [編集]

prolog_eでChezEdit-NTからのインタラプトが効かない原因がほぼわかりました。APIでCTRL+Cが無視されるようになったいたようです。

下記Cプログラムで確認できました。おそらくPetite Chez Scheme はSetConsoleCtrlHandler(NULL, FALSE ); でctrl+cを有効にしているのだと思います。


#include <windows.h>
#include <stdio.h>
#include <signal.h>

BOOL WINAPI CtrlHandler( DWORD CtrlEvent )
{
switch( CtrlEvent ) {
case CTRL_C_EVENT:
fprintf(stdout, "Catch CTRL_C_EVENT event\n" );
fflush(stdout);
return TRUE;
case CTRL_BREAK_EVENT:
fprintf(stdout, "Catch CTRL_BREAK_EVENT event\n" );
fflush(stdout);
return TRUE;
default:
return FALSE;
}
}



void main( void )
{
SetConsoleCtrlHandler(NULL, FALSE ); //CTRL+Cを有効にする。
SetConsoleCtrlHandler(CtrlHandler, TRUE );

fprintf(stdout,"CTRL+C,CTRL+BREAK TEST\n" );
fflush(stdout);
while( 1 ){ }
}

2 Re: CTRL+C が効かない原因
稲葉輝 2011-6-13 13:34  [返信] [編集]

検証のご協力ありがとうございました。

すでにsasagawaさまのwikiに書かせていただきましたが、Chezeditから立ち上げたAZ-Prologインタプリタで
「ctrl+c有効化」はwinAPI述語を使っておこなうことができました。

ctr_c_ok:-
winLoadLibrary('KERNEL32',KERN),
winGetProcAddress(KERN,'SetConsoleCtrlHandler',Addr),
winCallApi(Addr,[0,0],0,1,_,_,_).

?- ctr_c_ok.

なお、今回の成果を含め、近々、新バージョンの公開を予定しておりますのでよろしくお願いします。

3 Re: CTRL+C が効かない原因
sasagawa 2011-6-13 15:13  [返信] [編集]

早速の対応、ありがとうございました。
CTRL+Cのシグナルが有効になることをこちらでも確認しました。

AZ-Prologの高性能さに驚いています。リスト処理ライブラリを書いたり、簡易グラフィクスを書いたりと計画しています。

高性能処理系を個人向けに無償供与していただいていることに感謝申し上げます。
[掲示板に戻る全部 次100 最新50
管理者ログインサイト利用条件SOFNEC ホームページ
ソフネック株式会社