Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/31: Рейтинг темы: голосов - 31, средняя оценка - 4.55
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
1

Как дождаться завершения потока?

10.08.2012, 22:59. Просмотров 5742. Ответов 13
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Thread(void* pParam);
 
void main(){
_beginthread(Thread, 0, NULL);//Запускаем поток, он выполняет свои задачи....
//Тут программа выполняет свои задачи...
...
//Тут надо дождаться завершения потока, после этого выполнить ещё несколько команд.
WaitForSingleObject(Thread, INFINITE);
...
}
 
void Thread(void* pParam){
.......Код
_endthread();
}
Какой функцией это осуществить?
Пробовал WaitForSingleObject, не получается.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2012, 22:59
Ответы с готовыми решениями:

Запуск нескольких независимых потоков. Дождаться завершения всех (C++ 11)
Доброго времени суток. Подскажите, как запустить несколько независимых...

Как получить код завершения процесса
Привет форумчане. Подскажите если кто знает. Запускаю через CreateProcess...

Вызывть метод одного потока из другого потока
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : ...

Дождаться появления окна и программно нажать на кнопку в нем
насколько это реально и что нужно сделать? В игре DOTA2 перед тем как начать...

Как узнать статус потока?
добрый вечер, не подскажите, как узнать статус потока? Желательно, чтобы...

13
Invader_Zim
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
10.08.2012, 23:33 2
какой библиотекой пользуемся?

Добавлено через 42 секунды
и можно сделать чтобы по завершению поток сделал запись в переменную какую нить и смотреть.
1
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.08.2012, 23:48 3
WaitForSingleObject ожидает в качестве параметра HANDLE события, а не void. создай событие в трэйде, и просигналь его. там где ждешь - тоже его создай (CreateEvent() задай имя, или имей в процессе не больше одного, тогда это - одно "безымянное" событие)
1
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,397
Записей в блоге: 17
11.08.2012, 01:12 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DWORD WINAPI ThreadFunc(LPVOID IpParam)
{
//.....
return 0;
} 
//--------------------------------------------------------------------------- 
int main(int argc, char* argv[])
{
    DWORD thID;
    HANDLE hThread =CreateThread(NULL,0,ThreadFunc,0,0,&thID);
 
    WaitForSingleObject(hThread, INFINITE);
 
    return 0;
}
1
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
11.08.2012, 10:02  [ТС] 5
Avazart
Мне нужно именно через _beginthread, а не CreateThread. Но всё равно спасибо.

Invader_Zim
Через переменную можно, но пока поищу другой вариант.

novi4ok
Можно небольшой пример.
0
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
11.08.2012, 10:04 6
MaxxximyM, это и на _beginthread работает.
Почитай ещё про semaphore и mutex. Ещё есть critical section. Все эти три "штуки" позовляют дождаться завершения потока. Mutex даже "рекурсию" потока поддерживает
0
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
11.08.2012, 10:25  [ТС] 7
Разобрался.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void nikThread(void* pParam);
void login();
HANDLE sob;
 
 
void main(){
...
login();
..
}
 
void login(){
sob=CreateEvent(NULL,TRUE,FALSE,NULL);
_beginthread(nikThread, 0, NULL);
...
WaitForSingleObject(sob,INFINITE);
}
 
void nikThread(void* pParam){
...
SetEvent(sob);
_endthread();
}
0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.08.2012, 10:30 8
Дождаться потока с помощью WaitForSingleObject можно, если поток был создан вызовом _beginthreadex. Поток, созданный с помощью _beginthread дождаться этой ф-ей нельзя. Поэтому придется сигналить из потока о завершении.
2
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,397
Записей в блоге: 17
11.08.2012, 14:00 9
Мне нужно именно через _beginthread, а не CreateThread.
Не понимаю чем вызвана такая необходимость?
0
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
11.08.2012, 14:10 10
Avazart, CreateThread - устаревшая функция, как мне известно и не очень ладит с синхронизацией
0
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,397
Записей в блоге: 17
11.08.2012, 14:15 11
В каком плане? или мой пример не работет?
0
grizlik78
Эксперт С++
1987 / 1480 / 191
Регистрация: 29.05.2011
Сообщений: 3,059
11.08.2012, 14:28 12
Цитата Сообщение от Avazart Посмотреть сообщение
В каком плане?
В документации (MSDN) писали страшилки про то, что многие функции из CRT не будут правильно работать при создании потока с помощью CreateThread(). Однако, как оказалось, всё не так страшно и неработающая функция только одно — signal(). Ну и кроме того небольшие утечки памяти на каждое создание потока могут происходить.
Источник: Description of using C Run-Time (CRT) functions and CreateThread ()

Добавлено через 2 минуты
Впрочем, всё-равно лучше использовать _beginthread() или _beginthreadex().
1
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,397
Записей в блоге: 17
11.08.2012, 14:32 13
А что подразумевется под CRT ф-циями ?
0
grizlik78
Эксперт С++
1987 / 1480 / 191
Регистрация: 29.05.2011
Сообщений: 3,059
11.08.2012, 14:35 14
C Run-Time. Функции из библиотеки языка C.
0
11.08.2012, 14:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2012, 14:35

чтение строки как потока
Если у меня в текстовом файле (ifstream &fin) хранится какая-то...

Как освободить состояние потока ?
Здравствуйте. Нужна помощь. Вот небольшая часть моей программы int nr_block;...

Если не вводится число, то закрыть ввод и дождаться конца программы
так как программа будет с потоками надо дождаться конца программы, есть функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru