분류 전체보기
-
[Effective Modern C++] std::future의 소멸자C++/Effective Modern C++ 2023. 4. 19. 15:24
std::thread인스턴스는 소멸자 호출 시, 인스턴스의 join여부에 따라 행동이 갈라집니다. 이에 대한 자세한 내용은 이전 글 (std::thread를 unjoinable하게 만들어야 하는 이유)에 서술되어 있습니다. joinable한 std::thread인스턴스의 소멸자가 호출되면 프로그램이 종료되며, 이는 이것이 가장 최선의 대응이기 때문이라는 내용이었습니다. 이번 글은 std::thread외에 동시성 프로그래밍에 사용되는 std::future객체의 소멸자에 대하여 살펴보도록 하겠습니다. 1. std::future의 결과 저장 더보기 std::future객체는 피호출자 (std::future객체)가 호출자(std::async등의 함수를 지정하는 코드)에게 결과를 전송하는 통신 채널이라고 볼 수 ..
-
[Effective Modern C++] std::thread를 unjoinable하게 만들어야 하는 이유C++/Effective Modern C++ 2023. 4. 14. 15:25
std::thread객체는 현재 상태에 따라 두 종류로 구분이 가능합니다. Joinable : 실행 중(Running)이거나, 실행 중 상태로 전이할 수 있는 스레드입니다. Unjoinable : Joinable하지 않은 스레드입니다. Unjoinable상태는 다음과 같은 경우가 있습니다. 기본 생성된 std::thread는 실행할 함수가 없기 때문에 joinable하지 않습니다. std::thread는 복사할 수 없는 객체이기 때문에, 이동 후 원본 std::thread는 joinable하지 않습니다. join 및 detach된 std::thread는 joinable하지 않습니다. std::thread의 joinable 상태를 면밀히 점검하는 것은 매우 중요합니다. 이번 글에서는 std::thread의..
-
[Unreal Engine] Control game speed (Time Dilation)Unreal Engine 5._ 2023. 4. 6. 07:48
게임의 속도를 조절하는 방법을 알아보도록 하겠습니다. 1. AWorldSettings 더보기 첫 번째 방법은 AWorldSettings에 구현된 함수를 이용하는 것 입니다. 간단하게, 다음과 같은 구현을 사용할 수 있습니다. GetWorld()->GetWorldSettings()->SetTimeDilation({float variable}); 위 코드는 UWorld에서 AWorldSetting을 가져와서 SetTimeDilation을 호출하는 코드입니다. 위와 같은 코드의 결과로, 레벨의 속도가 인자로 전달한 variable배속이 됩니다. 1.0일 경우 1배속 (정상 속도), 2.0일 경우 2배속이 되는 방식입니다. 현재 게임의 속도를 확인하는 방법은 아래와 같습니다. GetWorld()->GetWorl..
-
[Effective Modern C++] std::async의 launch policy (std::launch)C++/Effective Modern C++ 2023. 3. 28. 14:33
지난 글 (std::thread와 std::async)에서 동시성 프로그래밍을 위해 사용되는 두 기능을 살펴보았습니다. 몇몇 예외 상황을 제외하고, 여러 편의성을 이유로 std::async가 더 좋다는 내용이었습니다. 지난 글의 예제에서는 std::async를 다음과 같이 호출했습니다. auto fut = std::async(function); 하지만 이런 호출에 대하여, function함수가 비동기적으로 바로 실행된다는 보장이 없습니다. 이번 글에서는 std::async의 작동 방식에 대하여 살펴보도록 하겠습니다. 1. std::launch 더보기 std::async는 의미론적으로는 지정 객체를 비동기적으로 호출하는 의미이지만, 실제로는 그렇지 않습니다. std::async는 특정한 실행 방침 (lau..
-
[Unreal Engine] SetTimer() : Passing parametersUnreal Engine 5._ 2023. 2. 24. 20:57
이전 글 (SetTimer() : C++ & Blueprint)에서 SetTimer에 대해 알아보았습니다. 특정 함수를 호출할 때, 반복 여부와 시간 간격을 자유롭게 지정할 수 있는 것이 큰 특징이었습니다. 이번 글에서는 SetTimer함수를 사용할 때, 호출되는 함수에 값을 전달하는 방법을 살펴보도록 하겠습니다. SetTimer의 오버로드 중 FTimerDelegate를 사용하는 함수가 있었습니다. 해당 버전의 함수는 FTimerDelegate 객체가 호출될 함수의 정보를 가지고 있습니다. 여기서 FTimerDelegate가 가질 수 있는 정보 중에는 호출될 함수에 전달될 파라미터도 포함됩니다. 코드를 통해 표현하면 아래와 같습니다. // Way 1 FTimerDelegate Del1 = FTimerD..
-
[Unreal Engine] IsA : Object type check in C++Unreal Engine 5._ 2023. 2. 17. 14:23
오브젝트에 대한 타입 체크가 필요한 경우, 블루프린트는 아래의 방법을 사용할 수 있습니다. 첫 번째는 위쪽의 Cast노드이고, 두 번째는 아래의 =(Equal) 노드입니다. 이번 글에서는 C++에서 오브젝트의 타입을 체크할 수 있는 기능에 대하여 살펴보도록 하겠습니다. 1. BP to C++ 더보기 C++또한 위 블루프린트 노드와 유사한 코드를 작성할 수 있습니다. /* Get actor code, stored in myActor variable */ // Case1 : Cast auto tmp = Cast(myActor); if(IsValid(tmp)) { } // Case2 : if(myActor == Cast(AMyObject::StaticClass())) { } 위와 같이 블루프린트의 상황을 흉내..
-
[Unreal Engine] UFUNCTION override (BlueprintNativeEvent)Unreal Engine 5._ 2023. 2. 7. 12:23
지난 글 (UFUNCTION override (C++))에서, UFUNCTION선언을 한 C++함수를 C++에서 오버라이드 하는 방법을 살펴보았습니다. C++의 함수를 블루프린트에서 오버라이드 하는 방법은 조금 다릅니다. 이번 글에서는 C++의 함수를 블루프린트에서 오버라이드 하는 방법을 살펴보도록 하겠습니다. 1. BlueprintNativeEvent 더보기 C++의 UFUNCTION을 오버라이드하려면 특별한 과정을 거쳐야 합니다. 첫 번째로, 오버라이드 하려는 함수는 UFUNCTION매크로에 BlueprintNativeEvent인자를 지정해야 합니다. 두 번째로, 특정한 함수를 추가해야 합니다. 위 두가지 과정을 거친 코드는 아래와 같습니다. UFUNCTIONO(BlueprintNativeEvent)..