2015-01-06 10 views
0

C/C++ 프로그램에서 즉각적인 일회성 작업을 CFRunLoop에 추가하는 가장 쉬운 방법은 무엇입니까? 다시 실행하기 전에 실행 루프에서 호출해야하는 콜백입니다.`CFRunLoop`에 즉시 작업을 추가하는 가장 쉬운 방법은 무엇입니까?

설명서에 따르면 CFRunLoopPerformBlock()이지만 문제는 Objective-C 컴파일 모드가 필요한 블록 표기법을 사용한다는 것입니다.

C/C++ 프로그램에서 사용할 수있는 CFRunLoopPerformBlock()과 비슷한 것이 있습니까? 아니면 제로 지연 타이머를 사용해야합니까?

답변

1

블록 언어 기능에는 Objective-C가 필요하지 않습니다. 또한 Clang의 C 및 C++에서도 지원됩니다. 이제는 CFRunLoopPerformBlock()을 사용할 수 있습니다.

대안을 찾고 있는데 주 스레드의 실행 루프 (즉, 주 실행 루프)를 타겟팅하려는 경우 dispatch_async_f()을 사용할 수 있습니다. GCD를 사용할 때 블록 기반 함수를 사용하는 것이 가장 일반적이지만 접미어 _f이있는 함수는 함수 포인터를 사용합니다. https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Articles/bxGettingStarted :

static void my_task_function(void *context) 
{ 
    // ... 
} 

... 

dispatch_async_f(dispatch_get_main_queue(), any_pointer_you_like, my_task_function); 
+0

쿨, 난 그냥 블록도 C에서 사용할 수있는, 즉 것을, 같은 일을 발견했다. html. –