이전의 문제를 해결하기 위해, 나는 친절하게도 pthreads를 통해 멀티 스레딩을 지적했다.C++ pthreads 멀티 태스킹 [windows]
원래 문제는 다음과 같습니다.
두 가지 기능이 있습니다. 그 중 하나는 실시간으로 본체입니다. 다른 하나는 지속적으로 실행되는 기능으로 차단됩니다. 블로킹 기능을 실행하려고 시도 할 때 실시간으로 명백한 블록이 생기므로 실시간 프로세스로 받아 들일 수없는 사용자에게는 반응이 없습니다.
원래의 목표는 차단 기능을 실시간 솔루션 (또는 적어도 의사 (pseudo-independent))과 독립적으로 만드는 것이 었습니다. 이는 pthread로 시도했습니다. 여기
코드의 단순화 된 버전입니다 :void * RenderImages(void * Data)
{
while(1); //Simulating a permanently blocking process
return NULL;
}
int main(int ArgC, char *ArgVar[])
{
pthread_t threads[PTHREAD_NUMBER];
void *Ptr = NULL;
int I = 0;
I = pthread_create(&threads[0], NULL, RenderImages, Ptr);
if(I != 0)
{
printf("pthread_create Error!\n");
return -1;
}
I = pthread_join(threads[0],NULL);
//Doesn't reach here as pthread_join is blocking
printf("Testing!\n");
return 0;
}
위의 코드 그러나 함수를 직접 호출 불필요하게 복잡한 방법보다 더 pthread에 아무것도하지 않습니다 위해 pthread_join (호출에 블록 - 포인트를 패배).
내 질문은 따라서이다 :
내가 다시 이동 한 후, 다른 기능을 실행 프로세스를 중지, 그것은 내가 몇 밀리 초에 대한의 pthread를 실행할 수 있도록 사용하는 것이있을 것입니다 어떤 기능과 몇 밀리 초 동안 프로세스를 실행 하시겠습니까?
또는
위의 할 수없는 경우, 원래의 문제에 어떤 해결책이?
스레드가 아무것도 수행하지 않기 때문에 블록됩니다. 두 아이디어는 동시에 실행되며 두 가지 모두 유용한 작업을 수행한다는 것입니다. 조인 할 때 주 스레드 블록을 유지하지만 다른 스레드는 실제로 실행 중입니다.이제 조인 전에 주 스레드 (일종의 루프와 같은)에서 실제 작업을 수행해야합니다. –
작업을 수행 할 것입니다 (그러나 코드를 단순하게 유지하려면 무한 루프가 실제로 함수 호출을 에뮬레이션합니다). 실행되는 전체 기간 동안 차단 된 이미 정의 된 클래스 함수를 호출하기 때문입니다. 어떤 의미에서, 프로세서가 이미 하나의 프로세스를 실행하고, 일시 중단하고, 일시 중지하고, 다른 프로세스를 실행하고, 일시 중단 한 다음 원래 프로세스를 실행한다는 점에서 프로세서가 이미 수행하고있는 작업이 있습니다. – SightS2
@ SightS2 정확하게 스레드가하는 일은 무엇입니까? 나는 정말로 당신의 문제를 보지 못합니다. OS는 현재 주 스레드가 조인 할 때까지 스레드간에 스와핑을합니다. 두 번째 스레드 만 활성 상태이지만 아무 것도하지 않기 때문에 볼 수 없습니다! –