playXP

서브 메뉴

Page. 1 / 21 [내 메뉴에 추가]
글쓰기
작성자 Azelkeeber
작성일 2010-11-16 01:55:34 KST 조회 3,995
제목
임계 부문을 이용한 대화상자 아이템 이벤트 방지

영문으론 Critical Section이라고 불리는 겁니다만


원래는 멀티쓰레드 (다중수행) 시 발생하는 문제를 방지하기 위해 존재하는 기술입니다.


A트리거에서 전역변수  X에 대하여

X  = X  + 1을 수행하고

B트리거에서 전역변수 X에 대하여

X = X + 1을 동시에 수행했을때


이전 X가 3이면 원래는 5가 되야됩니다만

트리거가 동시에 수행됏을때 둘다 읽는순간 둘다 3이였다면 결과 4가 되버리는 이상현상이 발생합니다.

이걸방지하기위하여


수행이전에 부울 변수에 사용 유무를 기록하여 부울먼저 검사하는 방식입니다.


즉 변수가 사용중인가를 검사하고 사용중일경우 해제될때까지 '대기'하는 항목입니다.


이 기능을 사용하기위해서는 락을 관리할 부울 변수를 전역으로 선언해 줘야합니다.


해당기능을 하단부의 아이템 클릭시 먼저 선언해 줄경우 


아래와같은 사용이 가능합니다



전역에 uiLock 부울 선언


UIMainmenuClick
    이벤트
        대화 상자 - 플레이어 1(이)가 아무 대화 상자 아이템 사용함. 이벤트 유형 클릭됨
    지역 변수
    조건
    행동
        일반 - If (조건) then (행동) else (행동)
            If
                (대화 상자 아이템 이벤트 유형) == 클릭됨
            Then
                일반 - uiLock(을)를 사용하여 임계 부문 진입
                    행동
                        일반 - If (조건) then 다중 (행동)
                            If Then Else 조건문
                                일반 - Else if (조건) then (행동)
                                    Else If
                                        (사용된 대화 상자 아이템) == ui_mainmenu_items[0]
                                    Then
                                        R_Utility - sendDebugMsg("TEST1")
                                        R_UI - UIMainmenuHide()
                                일반 - Else if (조건) then (행동)
                                    Else If
                                        (사용된 대화 상자 아이템) == ui_mainmenu_items[1]
                                    Then
                                        R_Utility - sendDebugMsg("TEST2")
                                        R_UI - UIMainmenuHide()
                                일반 - Else if (조건) then (행동)
                                    Else If
                                        (사용된 대화 상자 아이템) == ui_mainmenu_items[2]
                                    Then
                                        R_Utility - sendDebugMsg("TEST3")
                                        R_UI - UIMainmenuHide()
                일반 - 남은 행동 건너뛰기
            Else




즉 임계부분을 진입했을때 추가 작업을 수행하지 못하게 하고 선작업이 완료될때까지 기다리게 됩니다.

머 사실 if로 처리하는거랑 별다를건 없습니다만..


얼마전에 기능찾다가 발견한건데 아래글을 보니

이런식으로 활용할수 잇지 않을까 생각나서 적어봅니다;


지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
아이콘 Azelkeeber (2010-11-16 21:02:05 KST)
0↑ ↓0
센스 이미지
수정 : 주의점 임계부문안에서 행동건너뛰기를 할경우 변수락이 풀리지 않습니다. 임계부문사용시 주의하세요
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.