Wait(0)을 언제 사용합니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕 모두,
JSL 스크립트에서 'Wait(0)' 명령을 사용할 때 모범 사례가 무엇인지에 대한 질문이 있습니다.
이전에 스크립팅된 작업이 완료되기 전에 코드를 실행하는 측면에서 스크립트가 앞서 나갈 수 있는 경우가 있으며 이러한 작업 후에 wait(x) 명령을 넣는 것은 계속하기 전에 작업이 완료되었는지 확인하는 한 가지 방법입니다. 당신의 스크립트로.
이 문제에 대해 언제 걱정해야 하는지 궁금합니다. 예를 들어 데이터 테이블을 분할하는 경우 wait(0)이 필요합니까? 데이터 테이블에 '<
또한 Wait(0)을 사용할 때 가장 좋은 방법은 무엇입니까? 공식이 dt에서 평가되기를 기다리는 경우 wait(0)을 사용하는 대신 데이터 테이블에 '<< Run Formulas' 메시지를 보내는 것이 더 나을 것이라는 것을 알고 있지만 다른 경우에는 명확하지 않습니다. 상황.
이것이 다소 광범위하고 모호한 토론으로 보인다면 사과드립니다. 내가 가지고 있는 스크립트의 실행 시간을 개선하려고 노력하고 있다는 사실에서 비롯된 것이고, 프로파일러는 위에서 언급한 작업 유형 후에 삽입한 이러한 대기 명령에 많은 시간이 소요되고 있다고 말합니다. . 이것에 대한 통찰력이나 내가 볼 수 있는 리소스가 있다면 더 좋습니다. 건배!
Re: Wait(0)은 언제 사용합니까?뿐만 아니라 Here 네임스페이스(예: Here:myVar)를 사용합니다.
Re: Wait(0)은 언제 사용합니까?해당 확인란을 선택하고 싶을 것입니다.Here Namespace를 사용하는 것은 좋은 코딩일 뿐이며 'Names Default to Here(1);'로 모든 스크립트를 시작하는 것이 좋습니다. here 네임스페이스(또는 선택한 네임스페이스)를 사용하지 않으면 JMP가 모든 것을 전역 변수로 할당합니다.테스트 및 개인 코드의 경우 이것은 큰 문제가 아니지만 추가 기능에 스크립트를 넣는 경우 프로덕션에 사용될 것이라고 가정합니다.
Global 네임스페이스를 사용하면 반드시 프로덕션 스크립트에 문제가 발생합니다.가장 일반적인 문제는 "dt" 또는 "datatable"과 같은 공통 변수를 의도하지 않게 재정의하는 것입니다.다른 문제는 두 개의 스크립트 또는 애드인을 동시에 실행하는 것과 관련이 있습니다.예를 들어, 둘 다 For() 루프를 가질 수 있으며 변수 "i"는 For() 루프에 일반적으로 사용되고 "j"는 포함된 For() 루프에 사용되므로 둘 다 실행되기 시작하면 무한 루프를 실행하는 자신을 발견할 수 있습니다. 두 개의 서로 다른 스크립트에 의해 "i"가 계속 변경되는 루프.
Here 네임스페이스를 사용하면 스크립트가 열려 있거나 실행 중인 동안 각 스크립트에 임시 네임스페이스가 할당되므로 이러한 문제를 피할 수 있습니다.따라서 "i"는 스크립트에 대해 로컬이며 실수로 재할당하는 것에 대해 걱정할 필요가 없습니다.
Here 네임스페이스를 계속 사용하면서 버튼 상자 문제를 해결할 수 있는 방법은 백만 가지가 있습니다.버튼이 사용할 수 있는 특정 강력한 변수 이름을 전역으로 정의합니다.고유한 네임스페이스 정의 및 사용(강력한 변수 이름을 제시할 필요가 없음).버튼을 눌렀을 때 재할당되도록 버튼 상자의 스크립트에서 키 변수를 재정의합니다.<< 모달 사용.일정() 사용.데이터 테이블에 변수 저장. 요법 요법
Re: Wait(0)은 언제 사용합니까?후속 조치.나는 타이밍에 대해 여기에 속았다.Addin 마법사의 이 이상한 체크박스는 다음과 같습니다. 여기 규정되지 않은 JSL 변수 이름에 대한 네임스페이스".그것을 선택 취소하면 내 문제가 사라졌습니다.이것은 내 JRN이 ButtonBox에서 JSL을 실행하지 않는 이유를 설명합니다.-디제이
Re: Wait(0)은 언제 사용합니까?과거에 JMP8에서 JMP9로 마이그레이션하는 예에서 JMP9가 너무 빨리 실행되어 내 스크립트 중 일부가 작동하지 않는 것을 본 적이 있습니다.내가 기억하는 것처럼 wait(0); 모든 것이 괜찮았습니다.
이제 매우 이상하지만 실제적인 새로운 타이밍 문제 사례가 있습니다.
스크립트: ButtonBox가 있는 JRN.각 ButtonBox는 JSL을 실행합니다.
사례 1: 좋은 사례 - Windows 탐색기를 통해 JRN을 JMP로 열면 후속 JSL이 제대로 작동합니다.
사례 2: 잘못된 사례 - JRN을 JMP Addin 메뉴로 열면 작동하지 않습니다.로그는 알 수 없는 표시 상자(다양한 지점에서 JSL에 포함됨)를 표시하는 것 같습니다.그리고 이 두 가지 경우만 보면 Case 2가 Case 1보다 빠르게 실행되고 있어 내 눈에도!아니요, 이 경우 모든 파일 참조는 괜찮습니다. 두 경우 모두 내 로컬 PC에서 정확히 동일한 JRN/JSL을 사용하며 JMP 추가 기능에서 열도록 지시하는 방식도 차이가 없습니다("경로">$ADDIN_HOME vs "텍스트">열기).
제 경우에는 JMP가 로드하는 방식도 타이밍과 관련이 있는 것 같습니다.위의 사례 2에서 JMP는 JRN과 후속 스크립트를 훨씬 빠르게 로드할 수 있지만 불행히도 타이밍에 부정적인 영향을 미칩니다.어쨌든 내 접근 방식은 wait(0)을 시도하는 것입니다. JMP 속도를 약간 늦출 수 있는지 확인하기 위해 입니다.건배, 디제이
Re: Wait(0)은 언제 사용합니까?" 언제 필요한지 알기 전에 특정 문제에 부딪혀야 하는 것 같습니다." ... 동의합니다.대기를 불필요하게 사용하면 코드 속도가 느려집니다.내 코드가 실패하고 대기가 문제를 해결할 수 있는 유일한 방법인 경우에만 사용합니다.
내 코드에 대한 빠른 검색을 수행했으며 여기에 몇 가지 예가 있습니다. 모두 창과의 상호 작용과 관련이 있습니다.테이블 조작과 같은 핵심 JMP 작업에 대기가 필요한 예를 찾을 수 없었습니다.
예제 1: 텍스트 상자(또는 다른 표시 상자) 업데이트
계산 집약적인 작업(루프)을 수행하고 사용자에게 정보를 푸시하려는 경우 - 새로 고침을 수행하기 위해 창에 약간의 숨쉴 시간을 주어야 합니다(또는 이 예에서는 텍스트 상자가 포함된 창에 "reshow" 메시지를 보낼 수 있음). )
tb추정 << 텍스트 설정 ( "예상 완료 시간 = " || 숯 ( 추정 시간 ) || "초" ) ;
기다리다 ( 0 )
예 2: StatusMsg 사용
StatusMsg는 JMP용 다중 문서 인터페이스가 있기 전에 발명되었기 때문에 메시지를 표시하는 데 사용되는 창을 예측할 수 없습니다.대기를 사용하면 현재 창에 주의를 기울일 수 있습니다.
기다리다 ( 0 ) ;
strMessage = "어떤 메시지" ;
StatusMsg ( strMessage ) ;
예 3: 콘텐츠를 동적으로 업데이트
반드시 필요한 것은 아니지만 깜박임을 줄이는 데 도움이 될 수 있습니다.
( 여기 : vlb << 어린이 ) << 삭제 ;
기다리다 ( 0 ) ;
여기 : vlb << 추가( 콘텐츠 )
여기서 vlb는 V 목록 상자 또는 다른 표시 상자 컨테이너입니다.
-데이브
Re: 언제 Wait(0)을 사용해야 하나요?이 예에서는 현재 데이터 table() 이 참조하는 올바른 테이블을 가져오기 위해 기본 메뉴에서 작업을 트리거한 후 wait(0) 가 필요합니다.
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
Re: 언제 Wait(0)을 사용해야 하나요?게시물 삭제