Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Про потоки... / 3 сообщений из 3, страница 1 из 1
16.12.2004, 09:44
    #32829621
anterior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про потоки...
А как мне сделать так: Пусть пользователь щелкает по какому-либо элементу дерева (CTreeView), запускается поток который что-либо добавляет в список (CListBox). Если пользователь щелкнул по другому элементу файлового дерева и предыдущий поток ещё не завершился то ему(предыдущему) нужно послать сигнал о том что пора завершатся, и ждать пока посланный сигнал не обработается и не придет сигнал о том что поток действительно завершился. Я хотел решить эту задачу таким способом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// Функция потока которая что-то делает:
do 
{
<...>
} 
while (!ThreadStopped)
// ThreadStopped будет булевой переменной которая если имеет истинное значение то значит что потоку пора завершаться.
//А завершать поток я буду так(это уже в обработчике щелчка на элемент CTreeView):
ThreadStopped = true;
while (WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0) // дождаться пока поток не освободится
{
	//Если освободился тогда создать новый
}
Но этот механизм у меня не работает, незнаю почему. Наверное я не так понял предназначение функции WaitForSingleObject . Предложите свой выход решения моей проблемы.
...
Рейтинг: 0 / 0
16.12.2004, 10:41
    #32829760
Siebentearbeit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про потоки...
WaitForSingleObject на вход принимает элементы предназначенные для синхронизации: семафоры(semaphore) мутехи(mutex) и прочие...

Как ими пользоваться, надо тебе почитать в msdn
Общий смысл такой:
семафор это такая фигня со счётчиком состояний, если счётчик не 0, то
WaitForSingleObject на нём будет стоять пока он не обнулится или таймаут не пройдёт. Это полезно, когда надо ждать нескольких, которые релизят семафор.
К примеру, работают три потока, четвёртый ставить счётчик:3 и ждёт, пока каждый из трёх прорелизит.

Мутехи проще. Мутех эта такая фигня, обладать которой в данных момент может тока один поток. Это как туалет, кто первый добежал, тот закрылся и пока он оттуда не выйдет, другой будет стоять под дверью:WaitForSingleObject.
Причём именованый мутех - один на всю машину (один туалет на всю многоэтажку) и второй такой в рамках одной машины не создать.
...
Рейтинг: 0 / 0
16.12.2004, 10:44
    #32829765
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про потоки...
Кстати, может буква М на туалетах как раз означает Mutex? :)

Пойду в анекдоты напишу...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Про потоки... / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]