그러게요. func1(), func2() 가 서로 다른 프로세스에서 돌아가는 거라면 IPC 가 필요하겠지만, 위 경우는 그냥 말씀대로 button_pressed flag 체크하거나, signal 에 핸들러로 func2() 등록해서 실행하면 되는데 흠. func2()가 스레드로 또는 루프로 돌아가는 거라면 select, poll 같은 걸로 체크하면 될 거고, 뭔가 좀. 어차피 이벤트 루프 돌면 변수 체크하면 되는거고,.. GUI 라는게 event loop 도는 건데.
질문을 자세히 설명하면 안 되는 뭔가가 있나보죠.
func2()에서 세마포로 대기하고 있다가,
func2()에서 세마포로 대기하고 있다가, sigHandler()에서 func2()가 대기하고 있는 세마포 신호를 보내주면 됩니다.
답변 감사합니다.
lock을 사용하지 않고 할 수 있는 방법은 없을까요?
타이밍 상 크리티컬한 이슈가 발생할 가능성이 있어서요...
좀 더 상황에 대한 설명을 주셔야 할 것 같습니다.
좀 더 상황에 대한 설명을 주셔야 할 것 같습니다.
func2()가 시그널의 발생 존재를 무한정 기다릴지, 아니면 기다리지 않을지에 따라서도 선택지가 달라질 것 같네요.
func2()가 쓰레드로 돌고 있으면 타이밍에서 문제가 발생할 것 같지 않은데요?
조금 더 부연 설명을 드리자면
각 함수는 메인 쓰레드에서 호출하여 사용하고 있습니다.
func1()은 UI에서 특정 버튼을 누르면 호출 하는 함수이고,
func2()은 특정 동작을 하는 함수 입니다.
메인에서 func1()을 호출 하면 시그널을 발생 시키고 func2()에서 시그널을 발생 여부를 확인 하고 특별한 조건을 만족 하는 경우에 액션을 취하려고 합니다.
non block 함수 입니다.
func1()에서 func2()로 시그널이나 세마포를
func1()에서 func2()로 시그널이나 세마포를 주면 되지 않을까요?
func1 에서 func2 를 실행시키면 되지
func1 에서 func2 를 실행시키면 되지 않을까요.
아니면 callback 을 등록하는 방법을 사용해도 되고,
http://man7.org/linux/man-pages/man2/signal.2.html
man 페이지보면
signal() 함수로 원하시는 동작 구현하실 수 있을 것 같습니다.
...
부연 설명을 보니까 더 이해가 안가는데, 둘 다 메인 쓰레드에서 돌아가는 함수면 signal이 왜 필요하죠?
UI에서 특정 버튼을 누르면 전체 변수로 button_pressed = 1; 같은 거 넣어주고, func2에서는 시작할 때 if (button_pressed) 하면 되는 거 아닌가요?
그러게요. func1(), func2() 가 서로
그러게요. func1(), func2() 가 서로 다른 프로세스에서 돌아가는 거라면 IPC 가 필요하겠지만, 위 경우는 그냥 말씀대로 button_pressed flag 체크하거나, signal 에 핸들러로 func2() 등록해서 실행하면 되는데 흠. func2()가 스레드로 또는 루프로 돌아가는 거라면 select, poll 같은 걸로 체크하면 될 거고, 뭔가 좀. 어차피 이벤트 루프 돌면 변수 체크하면 되는거고,.. GUI 라는게 event loop 도는 건데.
질문을 자세히 설명하면 안 되는 뭔가가 있나보죠.
댓글 달기