2015-01-06 4 views
0

함수를 특정 시간 동안 실행 한 다음 실행을 일시 중지하고 다른 함수로 이동하는 방법이 있습니까? 나는 멀티 태스킹 할 수있는 프로그램을 만들 수 있기를 원한다. 나는 이미 <thread>을 사용해 보았지만 프로그램을 실행하려고 할 때마다 스레드 중 하나를 부분적으로 실행 한 다음 디버거가 "신호 SIGABRT"를 발생시키고 중지합니다. 이 일을하는 다른 방법이 있습니까?제한 함수 실행 시간

편집 : 여기

내가 가진 스레드를 사용하여 시도 코드입니다. 이 두 가지 기능을 동시에 사용하려고 시도한 다음 실행을 일시 중지하기 위해 타이머를 추가하기 위해 테스트로 만들었습니다. 짧은 시간에 하나의 스레드를 실행 한 다음 다른 스레드로 이동하고 계속 수행 할 수 있기를 원합니다.

#include <iostream> 
#include <thread> 

using namespace std; 

void task1() 
{ 
    for (int i=0; i<100; i++) 
    { 
     cout << i << '\n'; 
    } 
} 

void task2() 
{ 
    for (int i=0; i<100; i++) 
    { 
     cout << i << '\n'; 
    } 
} 

int main() 
{ 
    thread t1(task1); 
    thread t2(task2); 

    return 0; 
} 
+0

이미 무엇을 사용 했습니까? – sjdowling

+0

게시물이 편집되도록 게시물을 편집했습니다. – killer13666

+0

스레드 코드를 알려주세요. –

답변

1

멀티 스레딩없이 가장 일반적으로 사용되는 방법은 대부분의 GUI 프레임 워크에서 사용되는 메시지 루프를 남용하는 것입니다. 약간의 작업이 for 루프에서 수행 된 다음 PumpMessages 또는 대기중인 메시지를 처리하여 GUI 응답을 유지하기 위해 호출 된 것이면 더 많은 작업이 완료됩니다.

제 의견으로는 이것은 나쁜 습관입니다. 실제로 결과는 일관성이없고 느리고 응답이없는 응용 프로그램입니다.

다른 옵션은 C# 및 proposed for C++17에서 사용할 수있는 기능과 같은 재개 가능 기능입니다. 그러나 이것들은 현재 즉시 이용 가능하지 않을 것입니다.

이미 멀티 태스킹 권한을 얻는 것은 어렵습니다. 이미 충돌을 발견했기 때문에 동기화 버그가 일반적이며 런타임에만 찾을 수 있습니다. 그러나 멀티 코어 CPU는 현재 어디서나 표준이며 멀티 스레딩을 피할 수는 없으므로 올바른 방법을 익히는 것이 가장 좋습니다.