백그라운드에서 일부 작업을 처리하는 작업자 스레드 (pthread)가 있습니다. 그런 다음 화면에 결과를 표시하고 싶습니다. 그래서 UI 스레드 또는 메인 스레드에서 일부 코드를 실행해야합니다.UI 스레드에서 일부 코드를 실행하는 방법
iOS에서 dispatch_async(dispatch_get_main_queue(), ^{ /* My code */ });
을 사용할 수 있습니다. Android에서는 View.queueEvent()
을 사용할 수 있습니다. BB 10 네이티브 SDK를 사용하면 누구나 똑같은 것을 보여줄 수 있습니까?
감사합니다, 업데이트
솔루션.
마침내 2 가지 방법을 알아 냈습니다. 첫 번째 방법은 간단하지만 작동하지 않았습니다. 왜 그런지 모르겠습니다. 누구든지보고 싶으면 여기에 넣으십시오.
방법 1.
사용 bps_channel_exec
채널을 소유하고있는 스레드에서 일부 코드를 실행합니다. UI 스레드에서 채널을 만든 다음 활성 상태로 설정합니다. 그리고 작업자 스레드에서 bps_channel_get_active
을 호출하여 활성 채널을 가져온 다음 bps_channel_exec
을 사용하십시오. 그러나 그것은 나를 위해 일하지 않았고, 이유를 찾기를 계속합니다.
방법 2
이 방법은 더 복잡하지만, 생각에 간단하다. 작업자 스레드에서 이벤트를 UI 스레드로 푸시하십시오. UI 스레드 메인 루프에서 이벤트 종류를 처리 할 이벤트 처리기를 추가하십시오.
작업자 스레드에서 : bps_register_domain
을 호출하여 도메인을 등록한 다음 도메인을 사용하여 bps_event_create
을 호출하여 이벤트를 만듭니다. 그런 다음 bps_channel_push_event
을 호출하여 UI 스레드의 활성 채널로 이벤트를 푸시합니다. UI 스레드 메인 루프에
:
이for (;;) {
bps_event_t *event = NULL;
bps_get_event(&event, -1);
if (event) {
if (bps_event_get_domain(event) == the_domain_that_is_mentioned_above) {
// Handle the event
}
}
...
}
좋은 샘플 here 있습니다.
내가 그래서 QT 관련 API를 사용할 수 없습니다 캐스케이드를 사용하지 않는 참조하십시오. 마지막으로, 나는 해결책을 찾았다. – TienDC
UI에 무엇을 사용합니까? – Jean