Страница 1 из 1

Оформить через поток!

Добавлено: 15 мар 2010, 12:12
|| Flashka ||
Всем привет!!! Помогите пожалуйста оформить программу через потоки!! )))
В программе поиск элемента оформить как функцию потока. Сначала вводятся необходимые значения, затем осуществляется поиск и только после этого выводится результат!

Код: Выделить всё

/////////////////////////////////////////////////////////////////////////////////
//
// Фунуция бинарного поиска элемента
//
// FUNKCTION: int searchBinary(int*, int, int, int)
//
// PARAMETERS: [in] p_Array     - указатель на массив
//             [in] head        - левая граница подмассива
//             [in] tail        - правая граница подмассива
//             [in] g_KeySearch - эталон поиска
//
// RETURN VALUE: позиция элемента в массиве - в случае успеха
//               -1                         - в случае неудачи
//
// COMMENTS: элементы массива нумеруются с нуля
//
int searchBinary(int* p_Array, int g_KeySearch, int head, int tail)
{ 
    int currPosition = ELEMENT;
    if ((tail == head) && (p_Array[tail] != g_KeySearch )) 
    {
        return ELEMENT;
    }
    else 
    {
        currPosition = (head+tail)/2;
                if (g_KeySearch == p_Array[currPosition])
        {
                        return currPosition;
        }
                else 
        {
                        if (g_KeySearch > p_Array[currPosition]) 
                        {
                                currPosition = searchBinary(p_Array, g_KeySearch, head, currPosition);
                        }
                        else
                        {
                                currPosition = searchBinary(p_Array, g_KeySearch, currPosition+1, tail);
                        }
                }
        }
}

Re: Оформить через поток!

Добавлено: 15 мар 2010, 12:49
Romeo
Основной поток вызывает WinAPI CreateThread и затем делает WaitForSingleObject, дожидаясь окончания созданного потока. Подробности в MSDN. Пробуй сделать, если не получится, то вопросы сюда.

Re: Оформить через поток!

Добавлено: 15 мар 2010, 19:10
IceFlame
Создавать поток и ждать, пока он завершится? Какое-то бессмысленное занятие, но если для галочки - сойдет.

Re: Оформить через поток!

Добавлено: 16 мар 2010, 00:03
Romeo
Если операция поиска достаточно тяжеловесная, то основной поток может в цикле ожидания завершения потока осуществлять Pumping Messages, что позволит не повисать UI. Вполне академический подход. Не раз видел такое решение в достаточно серьёзных продуктах.

Re: Оформить через поток!

Добавлено: 16 мар 2010, 01:10
IceFlame
Как будут обрабатываться сообщения, если используется функция WaitForSingleObject? Или она вызывается в цикле попеременно с обработкой сообщений? То бишь Wait'ом мы лишь проверяем, завершился ли поток?

Re: Оформить через поток!

Добавлено: 16 мар 2010, 01:57
Romeo
Да, WaitForSingleObject проверяет завершился ли поток. Если не завершился, то крутим свой цикл сообщений до тех пор, пока очередь сообщений не будет пустой. Потом снова WaitForSingleObject. И так до тех пор, пока выполнение потока не завершится.