2015-03-04 2 views
0

Как передать данные в другой поток в рамках одного процесса? Я пишу в C++ для windows 7 os. Рассмотрим следующую нить, например:как передать информацию в поток во время выполнения?

DWORD WINAPI MyThreadFunction(LPVOID lpParam){ 
    while(true){ 
     //Do the thread's job here 
     if(gotReturnInstruction()){ 
      //release memory etc. 
      break; 
     } 
    } 
    return 0; 
} 

Этот поток выполняет свою работу до тех пор, пока какой-либо другой поток подскажет ему вернуться. У меня есть дескриптор потока, который я получаю от функции CreateThread(). Как передать сообщение в поток (в этом случае инструкция по остановке)?

+0

Обычно вы передаете параметрам дескриптор события, а внутри while (true) вы проверяете, предупреждено ли событие, чтобы остановить выполнение. –

+0

@ JoãoAugusto О каком событии вы говорите? Можете ли вы дать ссылку на документацию, может быть? –

+1

Функции Check, CreateEvent, SetEvent и WaitForSingleObject –

ответ

3

Вы не «нажимаете» инструкцию о остановке нити. Вместо этого этот поток должен «опросить» инструкцию остановки. Если поток находится в цикле и все время выполняет работу, он может проверить инструкцию stop так же просто, как проверять глобальную переменную bool stopThread, которая задается основным потоком, когда он хочет его остановить.

Тем не менее, это увеличит использование вашего процессора до 100%, если поток просто сидит в цикле while (true), ничего не делая, кроме проверки этой глобальной переменной. В этом случае вызовите WaitForSingleObject на event, который спит в вашей нити, пока основной поток не «сигнализирует о событии» и не разбудит его.

Смежные вопросы