Invoke 함수 / 람다

A Code AM·2020년 6월 23일
0

수업(20200212~)

목록 보기
11/12

Invoke : 부르다, 불러오다

Invoke는 자신이 설정한 시간만큼 함수 시작 시간을 지연시키는 기능
CPU최적화 시키기에도 유용하고 함수 실행 순서 조절하기에도 유용

멀티 스레드 환경에서 데이터 보호 위해 invoke를 써야 한다.
응용프로그램이 실행될 때 기본적으로 하나의 스레드가 발생
이것을 main스레드라고 부르는 이유는 Main()함수가 이 스레드의 시작점이기 때문
main 스레드가 메인 폼의 이벤트 처리를 담당하면서 각종 컨트롤들의 값을 읽고 쓰는 작업 수행

메인 폼에서 다른 폼을 띄울 경우 기본적으로 메인 스레드가 자식 폼의 컨트롤들까지 모두 소유한다. 별도의 스레드에서 폼의 컨트롤을 액세스하면 데이터가 깨질 수 있다.

별도의 스레드는 메인 스레드에게 컨트롤을 읽고 쓰는 작업을 위임하여 수행하기 하면 안전하다 그래서 외부 스레드가 메인 폼의 Invoke를 호출하는 것이다.

별도의 스레드에서 main_form.Invoke(xxx)를 호출 한다는 것
= 별도의 스레드가 main_form을 소유한 스레드에게 xxx함수 호출을 위임한다는 뜻

1️⃣ Invoke 사용 예

Invoke("실행하고자 하는 함수", 딜레이 시간);

2️⃣ InvokeRepeating

InvokeRepeating("실행하고자 하는 함수", 딜레이 시간, 반복 시간);
InvokeRepeating("Play", 2, 0.3f);

일정시간 후 함수 실행시키는 것뿐 아니라 일정 시간마다 함수 반복적으로 실행시킬 때 InvokeRepeating 함수 사용
ex) Play 함수를 2초 후에 실행시킨 후에 0.3초마다 반복하여 실행시킴

3️⃣CancelInvoke

CancelInvoke();

CancelInvoke는 실행되고 있는 모든 Invoke 함수를 취소시킨다

4️⃣IsInvoking

IsInvoking("실행하고자하는 함수")

현재 Invoke함수가 실행되고 있는지 파악해 줄 수 있는 구문이 바로 IsInvoking 함수

profile
배움기록

0개의 댓글