설명
이 테스트에서는 슬롯 작업이 비동기식으로 시작됩니다. 그 후 시연됩니다 완료될 때까지 기다리거나 해당 작업에 종료 신호를 보내는 방법. 있다 비동기적으로 작업을 시작하는 세 가지 방법: > $call.Async ... > 실행.ASync '...'; > put_utility fx 'Exec.ASync' / '...'; / put_utility fx 'Shell.ASync' / '...'; 각각의 작업 후에는 JobHandle 함수를 사용하여 프로세스 ID를 얻을 수 있습니다. 마지막으로 실행된 작업의 JobStatus(pid)를 사용하면 다음의 상태를 확인할 수 있습니다. 직업. 가능한 반환 값은 다음과 같습니다: 0: 오류(입력이 유효한 PID가 아니거나 접근이 거부됨) 1: 프로세스가 아직 실행 중입니다. 2: errorlevel에서 액세스할 수 있는 반환 코드로 프로세스가 완료되었습니다. 3: 프로세스가 더 이상 실행되지 않거나 실행되지 않았으며 사용 가능한 반환 코드가 없습니다. JobTerminate(pid)를 사용하면 실행 중인 작업에 인터럽트 신호를 보낼 수 있습니다. 만약 이 성공하면 반환 값은 1이고, 그렇지 않으면 0입니다. JobKill(pid)을 사용하면 실행 중인 작업에 종료 신호를 보낼 수 있습니다. 이것이었다면 성공하면 반환 값은 1이고, 그렇지 않으면 0입니다. 기여자: L. Westermann
소형 모델 유형 :슬롯
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : asynexec.gms
$title 컴파일 및 실행 시 비동기 실행 테스트(ASYNEXEC,SEQ=515)
$onText
이 테스트에서는 슬롯 작업이 비동기식으로 시작됩니다. 그 후 시연됩니다
완료될 때까지 기다리거나 해당 작업에 종료 신호를 보내는 방법. 있다
비동기적으로 작업을 시작하는 세 가지 방법:
> $call.Async ...
> 실행.ASync '...';
> put_utility fx 'Exec.ASync' / '...'; / put_utility fx 'Shell.ASync' / '...';
각각의 작업 후에는 JobHandle 함수를 사용하여 프로세스 ID를 얻을 수 있습니다.
마지막으로 실행된 작업의 JobStatus(pid)를 사용하면 다음의 상태를 확인할 수 있습니다.
직업. 가능한 반환 값은 다음과 같습니다:
0: 오류(입력이 유효한 PID가 아니거나 접근이 거부됨)
1: 프로세스가 아직 실행 중입니다.
2: errorlevel에서 액세스할 수 있는 반환 코드로 프로세스가 완료되었습니다.
3: 프로세스가 더 이상 실행되지 않거나 실행되지 않았으며 사용 가능한 반환 코드가 없습니다.
JobTerminate(pid)를 사용하면 실행 중인 작업에 인터럽트 신호를 보낼 수 있습니다. 만약 이
성공하면 반환 값은 1이고, 그렇지 않으면 0입니다.
JobKill(pid)을 사용하면 실행 중인 작업에 종료 신호를 보낼 수 있습니다. 이것이었다면
성공하면 반환 값은 1이고, 그렇지 않으면 0입니다.
기여자: L. Westermann
$offText
$call gamslib -q trnsport
$onEcho > sleep.gms
$초를 설정하지 않은 경우 $set 초 0
display$sleep(%secs%) '%secs%초 동안 수면'
$offEcho
$call.Async 슬롯 sleep --secs 3 lo=%슬롯lo%
$eval jh JobHandle
$set jh2 %system.JobHandle%
$%jh%가 아닌 경우 == %jh2% $abort JobHandle <> system.JobHandle
$log >>> 작업 핸들: %jh%
$라벨 루프스타트1
$평가 상태 JobStatus(%jh%)
$log >>> 상태: %status%
$%status%가 아닌 경우 == 1 $goTo loopdone1
$통화 수면 1
$goTo 루프스타트1
$label loopdone1
$if not %status% == 2 $abort '*** $call.Async 게임... 실패: 잘못된 상태'
$if errorlevel 1 $abort '*** $call.Async 게임... 실패: 잘못된 오류 수준'
$call.Async =슬롯 sleep --secs 3 lo=%슬롯lo%
$eval jh JobHandle
$log >>> 작업 핸들: %jh%
$라벨 루프스타트2
$평가 상태 JobStatus(%jh%)
$log >>> 상태: %status%
$%status%가 아닌 경우 == 1 $goTo loopdone2
$통화 수면 1
$goTo 루프스타트2
$label loopdone2
$if not %status% == 2 $abort '*** $call.Async =슬롯... 실패: 잘못된 상태'
$if errorlevel 1 $abort '*** $call.Async =슬롯... 실패: 잘못된 오류 수준'
파일 FX;
스칼라 jh,kill,상태 /1/;
Execute.ASync '슬롯 sleep --secs 3 lo=%슬롯lo%';
jh = 작업 핸들;
put_utility fx 'log' / '>>> JobHandle :' jh;
동안(상태 = 1,
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
display$sleep(1$(status=1)) '좀 자세요';
);
abort$(status <> 2) '*** Execute.ASync 게임... 실패: 잘못된 상태';
abort$errorlevel '*** Execute.ASync 게임... 실패: 잘못된 오류 수준';
Execute.ASync '=슬롯 sleep --secs 3 lo=%슬롯lo%';
jh = 작업 핸들;
상태 = 1;
put_utility fx 'log' / '>>> JobHandle :' jh;
동안(상태 = 1,
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
display$sleep(1$(status=1)) '좀 자세요';
);
abort$(status <> 2) '*** Execute.ASync =슬롯... 실패: 잘못된 상태';
abort$errorlevel '*** Execute.ASync =슬롯... 실패: 잘못된 오류 수준';
put_utility fx 'Exec.ASync' / '슬롯 sleep --secs 3 lo=%슬롯lo%';
jh = 작업 핸들;
상태 = 1;
put_utility fx 'log' / '>>> JobHandle :' jh;
동안(상태 = 1,
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
display$sleep(1$(status=1)) '좀 자세요';
);
abort$(status <> 2) '*** Exec.ASync 게임... 실패: 잘못된 상태';
abort$errorlevel '*** Exec.ASync 게임... 실패: 잘못된 오류 수준';
put_utility fx 'Shell.ASync' / '슬롯 sleep --secs 3 lo=%슬롯lo%';
jh = 작업 핸들;
상태 = 1;
put_utility fx 'log' / '>>> JobHandle :' jh;
동안(상태 = 1,
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
display$sleep(1$(status=1)) '좀 자세요';
);
abort$(status <> 2) '*** Shell.ASync 게임... 실패: 잘못된 상태';
abort$errorlevel '*** Shell.ASync 게임... 실패: 잘못된 오류 수준';
$call.Async =슬롯 sleep --secs 3 lo=%슬롯lo%
$eval jh JobHandle
$log >>> 작업 핸들: %jh%
$평가 상태 JobStatus(%jh%)
$log >>> 상태: %status%
$eval kill JobKill(%jh%)
$log >>> RC 죽이기 : %kill%
$if %kill% == 0 $abort '*** 컴파일 시간 JobKill 실패: kill이 오류를 반환함'
$평가 상태 JobStatus(%jh%)
$log >>> 상태: %status%
$ifThen %status% == 1
$통화 수면 1
$평가 상태 JobStatus(%jh%)
$log >>> 상태: %status%
$endIf
$if %status% == 1 $abort '*** 컴파일 시간 JobKill 실패: 프로세스가 종료되지 않음'
Execute.ASync '=슬롯 sleep --secs 3 lo=%슬롯lo%';
jh = 작업 핸들;
put_utility fx 'log' / '>>> JobHandle :' jh;
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
kill = JobKill(jh);
put_utility fx 'log' / '>>> RC 죽이기 :' kill;
abort$(kill=0) '*** 실행 시간 JobKill 실패: kill이 오류를 반환함';
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
if(상태=1,
display$sleep(1) '잠깐만 자세요';
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
);
abort$(status=1) '*** 실행 시간 JobKill 실패: 프로세스가 종료되지 않음';
Execute.ASync '슬롯 sleep --secs 8 lo=%슬롯lo%';
jh = 작업 핸들;
put_utility fx 'log' / '>>> JobHandle :' jh;
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
옵션solvelink=%solveLink.chainScript%;
$include trnsport.gms
put_utility fx 'log' / '>>> JobHandle :' jh;
동안(상태 = 1,
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
display$sleep(1$(status=1)) '좀 자세요';
);
$if %system.filesys% == UNIX abort$(status <> 3) '*** 해결 실패 후 회수: 잘못된 상태';
$if not %system.filesys% == UNIX abort$(status <> 2) '*** 해결 실패 후 회수: 잘못된 상태';
$if not %system.filesys% == UNIX abort$errorlevel '*** 해결 실패 후 회수: 잘못된 오류 수준';
$onEcho > SpawnJob.gms
$set 플래그 mip=scip iterlim=30000 lo=2
파일 fx, fy /pid.inc/;
스칼라 jh,kill,상태 /1/;
Execute.ASync '=슬롯 sleep --secs 3 lo=%슬롯lo%';
jh = 작업 핸들;
put_utility fx 'log' / '>>> JobHandle :' jh;
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
putclose fy jh:0:0;
$offEcho
$call 게임 SpawnJob lo=%슬롯lo%
$onEcho > CollectJob.gms
파일 FX;
스칼라 종료, 상태 /1/;
스칼라 jh /
$include pid.inc
/;
put_utility fx 'log' / '>>> JobHandle :' jh;
동안(상태 = 1,
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
display$sleep(1$(status=1)) '좀 자세요';
);
$if %system.filesys% == UNIX abort$(status <> 3) '*** 핸들 수집 실패: 잘못된 상태';
$if not %system.filesys% == UNIX abort$(status <> 2) '*** 핸들 수집 실패: 잘못된 상태';
$if not %system.filesys% == UNIX abort$errorlevel '*** 핸들 수집 실패: 잘못된 errorlevel';
$offEcho
$call 슬롯 CollectJob lo=%슬롯lo%
$if errorlevel 1 $abort '*** 수집 핸들 실패'
$exit
*모든 플랫폼에서 무언가를 실행하려면 약간의 작업이 필요합니다.
Execute.ASync '쓰레기 주사위 %flags%';
jh = 작업 핸들;
put_utility fx 'log' / '>>> JobHandle :' jh;
상태 = JobStatus(jh);
put_utility fx 'log' / '>>> 상태 :' status;
abort$(Status<>0) '*** 쓰레기를 생성할 때 오류가 발생해야 합니다.';