Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
1

Ожидание завершения потока

19.02.2013, 23:38. Показов 3766. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго вечера.
Подскажите...то я что то сам не разобрался...
Как подождать завершения потока...

C++
1
2
3
4
5
6
7
8
//  if (поток завершен) {
        OSCAM1Click(0);  // жмяк
    }
  // else (ждем завершения потока)
    {
        N2Click(0);   //и жмякаем на кнопку 
       
    }
Так запускаю поток

C++
1
2
 MyThread1 = new TMyThread(true);
        MyThread1->Resume();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2013, 23:38
Ответы с готовыми решениями:

Ожидание завершения процесса
Как дождаться завершения процесса и выполнить команду ?

Ожидание завершения процесса
Как дождаться завершения процесса и выполнить команду ?

Ожидание завершения процесса
Привет, есть путь к файлу, есть файл, после запуска файл выполняет действия и закрывается. Задача:...

Запуск приложения и ожидание его завершения
Имеется приложение ( консольное, не требует каких-либо действий от пользователя и завершается...

25
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.02.2013, 00:03 2
А зачем тогда нужен отдельный поток? С таким же успехом можно сделать все в основном потоке.

Добавлено через 10 минут
WaitForSingleObject
0
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 00:05  [ТС] 3
gumi250,
Цитата Сообщение от gumi250 Посмотреть сообщение
сделать все в основном потоке.
программа получает ссылку на файл (парсит страницу и скачивает файл), и если в основном потоке...то программа повисает на 3 секунды...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.02.2013, 00:07 4
Цитата Сообщение от gumi250 Посмотреть сообщение
С таким же успехом можно сделать все в основном потоке.
Цитата Сообщение от Ddv122 Посмотреть сообщение
... если в основном потоке...то программа повисает на 3 секунды...
Ты сам сказал подождать... Зачем создавать поток потом еще его и ждать ?
0
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 00:11  [ТС] 5
Avazart, ну мне нужно подождать покуда в потоке скачает файл, а потом уже
нажать на кнопку
C++
1
OSCAM1Click(0);
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.02.2013, 00:14 6
Если основной поток будет ждать дочерний поток, то основной поток будет висеть. В чем смысл?
0
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 00:23  [ТС] 7
Цитата Сообщение от Ddv122 Посмотреть сообщение
// *if (поток завершен) {
* * * * OSCAM1Click(0); *// жмяк
* * }
* // else (ждем завершения потока)
* * {
* * * * N2Click(0); * //и жмякаем на кнопку
}
просто этот код выполняется с трея и как бы не требует участие пользователя...
нужно сначала скачать файл, а потом программа его обработает...
Файл у меня скачивается в другом потоке т.к во время работы не с треем а в программе, что бы не было подвисания...
и изначально не нужно нажимать на
C++
1
OSCAM1Click(0); *// жмяк
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.02.2013, 00:44 8
Из потока -
C++
1
Synchronyze(& SomeThreadMethod  );
А в методе
C++
1
OSCAM1Click(0);
1
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 00:57  [ТС] 9
Цитата Сообщение от Ddv122 Посмотреть сообщение
изначально не нужно нажимать на
Чёт я запутался
если я выполню

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 __fastcall TMyThread::SomeThreadMethod()
{
    Form1->OSCAM1Click(0);
}
 
__fastcall TMyThread::TMyThread(bool CreateSuspended)
    : TThread(CreateSuspended)
{
    FreeOnTerminate =true;
}
 
void __fastcall TMyThread::Execute()
{
//бла бла бла
    Synchronize(&SomeThreadMethod);
}
 
void __fastcall TForm1::N2Click(TObject *Sender)
{
 
        MyThread1 = new TMyThread(true);
        MyThread1->Resume();
}
то всегда будет нажиматься
C++
1
OSCAM1Click(0);
в мне нужно только когда с трея...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.02.2013, 01:00 10
C++
1
2
3
4
void __fastcall TMyThread::SomeThreadMethod()
{
   if( Form1->UseFromTray == true )  Form1->OSCAM1Click(0);
}
1
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 01:25  [ТС] 11
Avazart, чёт я протупил не работает у меня.Может подскажите где ошибка?
C++
1
BOOL clc=False;
на кнопке в трее

C++
1
2
3
4
5
void __fastcall TForm1::Oscam2Click(TObject *Sender)
{
   clc=True;
   N2Click(0);   //начинает поток
}
и в синхронизации

C++
1
2
3
4
5
6
void __fastcall TMyThread::SomeThreadMethod()
{
 
 
    if(  clc==true )  Form1->OSCAM1Click(0);
}
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.02.2013, 01:33 12
Вот как, из вашего кусочка кода можно подсказать где у вас какая то ошибка?
0
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 01:39  [ТС] 13
я имею ввиду клик на OSCAM1Click ( 0 ) ; не происходит...
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.02.2013, 01:57 14
Ну сам подумай, это может быть если clc==false, ну как такое может быть если вы ранее присвоили ему true?
1
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 01:59  [ТС] 15
gumi250, я понимаю, но в итоге оно False
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.02.2013, 02:03 16
Найди кто его меняет.
1
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 02:08  [ТС] 17
Всем спасибо
нашел свой косяк .
наверно тупа, но я в H файле объявлял переменную
C++
1
BOOL clc=False;
что бы была видна всем остальным формам.
А нужно было
в cpp объявить
C++
1
BOOL clc=False;
а на другой форме
C++
1
extern BOOL clc;
И все стало на свои места
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.02.2013, 02:10 18
По мойму из моего кода ясно было что можно её сделать членом класса формы, а не "висячей" переменной (глобальной)
И почему BOOL ? чем bool не угодил ?
0
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
20.02.2013, 02:21  [ТС] 19
Не сердчайте, я же учусь
В колледже нам не чего не рассказывали и не объясняли, все приходится самому...
Мы только определения учили, а практики 0...
А на счет BOOL это builder подсказал, когда я bool писал, я спорить с ним и не стал...
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.02.2013, 02:33 20
Avazart, а есть разница между BOOL и bool? А между TRUE и true, FALSE и false?
0
20.02.2013, 02:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2013, 02:33
Помогаю со студенческими работами здесь

Дождаться завершения потока
Как заставить это дожидаться завершения потока перед тем как продолжить? for ((i = 0); i < qwe;...

Дождаться завершения потока TThread
Есть поток TThread под названием autoupdate и я зщ как после его вызова дождатся его завершения и...

Как дождаться завершения потока в событии FormClose
Manual *man; __fastcall Manual::Manual(bool CreateSuspended) : TThread(CreateSuspended) {...

Ожидание завершения потока
Всем привет. В цикле создаю и запускаю N потоков. Интересует как сделать чтобы главный поток...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru