Поиск:

Ответ в темуСоздание новой темы Создание опроса
> автономная работа потоков 
:(
    Опции темы
Albles
Дата 9.12.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Подскажите, пожалуйста начинающему программисту.
Создаю объект потока с помощью Thread.
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Potok_com_port = new Potok (false);  // создаем объект
Potok_com_port->Priority = tpTimeCritical;  // потоку - наивысший приоритет
Potok_com_port->FreeOnTerminate = true; // разрушить объект Potok_com_port при окончании потока
}


В самом потоке обмениваюсь с com-портом.

Код

__fastcall Potok::Potok(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall Potok::Execute()
{
glob=0;
while(!Terminated)
     {Synchronize(Com_port); // бесконечный цикл работы с портом
     }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall Potok::Com_port()
{
//работа с портом, обращений к форме не происходит.
}



Но поток останавливается при остановке функций формы (например при ShowMessage).

Как сделать, чтобы поток не останавливался, а продолжал работать?


PM MAIL   Вверх
artsb
Дата 9.12.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Albles @  9.12.2009,  12:19 Найти цитируемый пост)
Potok_com_port->Priority = tpTimeCritical;

Это ИМХО не к месту. Поток уже работает в это время.

Цитата(Albles @  9.12.2009,  12:19 Найти цитируемый пост)
Potok_com_port->FreeOnTerminate = true;

Это лучше перенести в Execute.

Если обращений к форме нет, то Sinchronize не нужен, и проблемы из-за него ИМХО.

Код

Potok_com_port = new Potok (true);
Potok_com_port->Priority = tpTimeCritical; 
Potok_com_port->Resume();


Код

void __fastcall Potok::Execute()
{
FreeOnTerminate = true;
glob=0;
while(!Terminated) {
 Com_port(); // бесконечный цикл работы с портом
}
}


Это сообщение отредактировал(а) artsb - 9.12.2009, 13:14


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Alca
Дата 9.12.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Это ИМХО не к месту. Поток уже работает в это время.

artsb, а что нельзя задавать приоритет работающего потока?

Добавлено через 54 секунды
Цитата

Код

Potok_com_port->FreeOnTerminate = true;


Цитата

Это лучше перенести в Execute.

Сенс какой?


--------------------
PM WWW ICQ Skype Jabber   Вверх
artsb
Дата 9.12.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Alca @  9.12.2009,  13:14 Найти цитируемый пост)
а что нельзя задавать приоритет работающего потока?

Да, хз. smile Скорее всего можно...

Это сообщение отредактировал(а) artsb - 9.12.2009, 13:16


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Alca
Дата 9.12.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Да, хз.

http://msdn.microsoft.com/en-us/library/ms686277(VS.85).aspx

Добавлено через 1 минуту и 42 секунды
Цитата

Если обращений к форме нет, то Sinchronize не нужен, и проблемы из-за него ИМХО.

Согласен  smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
artsb
Дата 9.12.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Alca, за инфу пасибо камрад! Но тем не менее, всё дело в Sinchronize.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Albles
Дата 9.12.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Спасибо! Помогло.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.