2013-12-16 3 views
0

두 함수가 있는데, 두 함수를 병렬로 실행해야 주 함수에서 스레드를 만들 수 있습니다. 코드는 아래와 같습니다.win32에서 스레드를 실행하는 단계

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
...... 

    _beginthread(ModbusRead,0,(void*)12); 
    _beginthread(ModbusWrite,0,(void*)10); 
} 

두 기능은 ModbusRead 및 ModbusWrite입니다.

나는 내 코드에서이 두 줄의 스레드 만 구현했으며 주요 기능의 주 스레드와 병렬로이 두 기능을 병렬로 실행합니다.

ModbusRead는 thread1에 있고 ModbusWrite는 thread2에 있습니다. 나는 다음과 같이해야한다.

function ModbusWrite(thread2) 
{ 
    if (condition1 true) 
    { 
     Pause thread1(donot run function ModbusRead) 

     if(condition2 true) 
       { 
        resume thread1(restart function ModbusRead) 
       } 
    } 
} 

내 스레드 구현이 정확한지 여부를 어떻게 내가 위에서 언급 한 조건을 충족 할 수 있는지 여부를 난 내가 방황하고 스레드에 새로운 오전입니다.

+0

상호 배제 또는 어떤 종류의 이벤트/신호를 원하는 것처럼 보입니다. 이와 같은 스레드 간 통신은 상당히 복잡한 문제이며, 교착 상태 및 기타 문제를 피하기 위해 신중한 설계가 필요하기 때문에 이러한 맥락에서 적절하게 설명 할 수있는 것은 아닙니다. 동기화에 대한 MSDN 설명서를 참조 할 수 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms686353(v=vs.85).aspx –

+0

이 질문은 [귀하의 다른 하나] (http://stackoverflow.com/questions/20603507/what-is-the-correct-synchronization-method-for-the-thread-in-win32)? – chwarr

+0

다른 하나는 .. 비슷한 방법으로 시도하고 코드를 붙여 넣을 수 없으므로 다른 질문을 더 자세히 만들었습니다. – user3048644

답변

0

Thread1은 루프를 통해 매번 이벤트를 검사하는 루프 여야합니다. 이벤트가 설정되지 않으면 스레드는 WaitForSingleObject에서 일시 중단됩니다.

while (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, INFINITE)) 
{ 
    ...do some thread work 
} 

다른 스레드가 CreateEvent에 처음에, 다음로 SetEvent 나 ResetEvent가/다시 시작 thread1 일시 사용합니다. 스레드가 즉시 일시 중지되지 않습니다. 루프가 WaitForSingleObject로 돌아올 때만.

실제로 스레드를 종료 할 때 신호를 보내는 방법이 필요할 수도 있습니다. 이 작업은 WaitForMultipleObjects를 사용하여 수행 할 수 있습니다. 하나의 이벤트는 다시 시작/일시 중지하고 두 번째 이벤트는 종료합니다.

관련 문제