하나의 구이버튼으로 일시정지/재시작을 같이 쓰는방법이 없을까요?
게시판 검색해서 된다고하는걸 찾았는데 저는 안되더라구요;;
Gui, Add, Button, x175 y150 w50 h30 g정지, 정지
Pause := 0
정지:
Pause, Off
if (pause = 0)
{
Gui, Submit, nohide
GuiControl,, 정지, 재시작
Pause, On <----여기 ON 이 됐으니 멈췄다가 한번 더 누르게되면 여기서부터 시작되는거 아닌가요??
pause = 1
}
else if (Pause = 1)
{
Gui, Submit, nohide
GuiControl,, 정지, 정지
Pause, Off
pause = 0
}
return
틀린부분이나 다른방법이 있다면 알려주세요
쓰레드 흐름을 잘 생각해보세요
스크립트가 기존에 수행하고 있던 쓰레드를 메인 쓰레드라고 하고요
버튼을 누르면 "정지" 라는 쓰레드가 가동된다고 해봅시다.
메인 쓰레드 수행 중 정지 쓰레드가 가동되면 메인 쓰레드는 일시정지되고 정지 쓰레드가 난입하여 수행됩니다.
정지 쓰레드 수행중 포즈를 만납니다. 여기서 일시 정지 됩니다.
사용자는 일시정지를 풀기 위해 다시 버튼을 누릅니다.
작성자님이 생각한 이론은 정지버튼을 또 누르면 새로운 정지 쓰레드가 인터럽트하여 포즈를 풀고 리턴을 만나고,
기존의 정지쓰레드는 Pause On 다음줄 부터 재개되어 리턴을 만나고
메인쓰레드가 재개 된다는 것이지만,
문제는 하나의 버튼으로 가동된 쓰레드가 끝나기 전까진 다시 버튼을 눌러도 두번째 쓰레드가 시작되지 않는다는거죠
이 문제를 해결하기 위해서는 정지, 재시작 버튼을 따로 동일한 위치에 만들어서 각각 Pause, On, Pause, Off로 서브루틴을 따로 구현하시고,
정지버튼은 보이는 상태, 재시작버튼은 Hide상태로 놓고 정지버튼을 누르면 정지버튼을 Hide, 재시작버튼은 show로 전환을 시켜주는 방법이 있고요
아니면 상기처럼 하나의 버튼으로 하되 Pause, On, 1 옵션을 주어 사용하는 방법이 있습니다.
1옵션은 현재의 쓰레드를 정지하는게 아니라 현재의 쓰레드가 인터럽트한 쓰레드를 일시정지하는 효과가 있습니다.
자세한건 오핫키 공홈 매뉴얼 참고하시길 바래요