2013-05-22 3 views
0

В настоящее время я играю с WinAPI, и я перешел к темам. Моя программа имеет n темы, которые работают друг с другом. Существует один поток, который записывает некоторые данные в определенную ячейку памяти и ожидает, пока поток, работающий с определенной ячейкой памяти, обрабатывает данные. Затем вся процедура повторяется снова, не прерывая нити.Продолжить выполнение другой темы

Моя проблема в том, что ожидание второй очереди тратит слишком много времени. Есть ли способ приостановить текущий поток (оставить время для других потоков) или решить эту проблему по-другому?

Пожалуйста, помогите.

+0

WaitForMultipleObjects [здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025 (v = vs.85) .aspx)? – neagoegab

+0

Как это работает? – user35443

+0

Является ли ваша основная тема опросом рабочих? Если да, изучите использование объекта синхронизации, например [Event] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682655 (v = vs.85) .aspx) или [Семафор] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685129(v=vs.85).aspx) – simonc

ответ

1

Я предполагаю, что вы в настоящее время занимаетесь опросом/занятием в своем основном потоке, постоянно проверяя состояние какого-либо флага завершения, установленного рабочим потоком. Как вы заметили, это нежелательно, поскольку вы используете некоторую долю пропускной способности процессора, ожидая завершения работы. В некоторых случаях это сократит время, на которое запланирован ваш работник, задерживая его завершение.

Вместо этого вы можете использовать объект синхронизации, такой как Event или Semaphore, чтобы ваша основная нить спала до тех пор, пока рабочий не сообщит о ее завершении.

1

Вы можете использовать объекты синхронизации, такие как mutex, semaaphores events и т. Д. Для синхронизации, и WaitForSingleObject/WaitForMultipleObject API для ожидания потока.