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


[掲示板に戻る]


2 Re: prolog_e 漢字 ctrl+c
ゲスト

sasagawa 2011-6-10 7:46  [返信] [編集]

ChezEditが子プロセスを呼び出しているコードを全部掲載します。
1番目がCtrl+Cシグナル、3番目がCTRL+Dシグナルを送っている部分です。

Petite Chez Scheme はこのCTRL+Cでインタラプトがかかっています。
SML/NJはこのCTRL+Dでインタラプトがかかっています。

Gauche/Win、Mosh/WinではうまくCTRL+Cがかかっていません。
prolog_eにおいても同様です。

以下Delphiコードです。

program ChezSpawn;

{$APPTYPE CONSOLE}

uses
SysUtils, Windows, Messages;

var
CmdLine,Startup: string;
h: array[0..3] of THandle;
ClassName: array[1..20] of Char;
hwndCloseWindow: HWND;
StartInfoCh: STARTUPINFO;
ProcInfo: PROCESS_INFORMATION;
Window: string;
I: integer;
label
CloseExit;
begin
{ TODO -oUser -cConsole Main : ここにプログラムコードを書いてください }
CmdLine := ParamStr(4);
Startup := ParamStr(5);
CmdLine := CmdLine + ' ' + Startup;
h[0] := StrToInt(ParamStr(1)); //interrupt
h[1] := StrToInt(ParamStr(2)); //CtrlBreak
h[2] := StrToInt(ParamStr(3)); //CtrlD

GetStartupInfo(StartInfoCh);
with StartInfoCh do
begin
wShowWindow := SW_HIDE;
dwFlags := STARTF_USESHOWWINDOW;
end;
CreateProcess(nil,
PChar(CmdLine),
nil,
nil,
true,
CREATE_NEW_PROCESS_GROUP,
nil,
nil,
StartInfoCh,
ProcInfo);

while true do
case WaitForMultipleObjects(3,@h,false,INFINITE) of
WAIT_OBJECT_0 + 0:
begin
GenerateConsoleCtrlEvent(CTRL_C_EVENT,ProcInfo.dwProcessid);
end;
WAIT_OBJECT_0 + 1:
begin
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
Window := 'ConsoleWindowClass';
strcopy(@ClassName,PChar(Window));
hwndCloseWindow := FindWindow(@ClassName,nil);
PostMessage(hwndCloseWindow,WM_CLOSE,0,0);
goto CloseExit;
end;
WAIT_OBJECT_0 + 2:
begin
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
end;
end;

CloseExit:
for I:= 0 to 2 do
CloseHandle(h[i]);

end.


prolog_e 漢字 ctrl+c sasagawa 2011-6-10 3:56
Re: prolog_e 漢字 ctrl+c sasagawa 2011-6-10 7:46
管理者ログインサイト利用条件SOFNEC ホームページ
ソフネック株式会社