Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с 2 потоками, создание потока в потоке 
:(
    Опции темы
sergey_85
Дата 10.10.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

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



Привет всем!

Есть программа создающая вторичный поток,
в котором что-то выполняется, при завершении работы в этом потоке происходит вызов события OnEnd()
Код

void __fastcall ThWorkManager::Execute()
{
    try
    {
        if(OnBegin)
            Synchronize(SyncOnBegin);

        //Do work
        if(OnWork)
            this->data = OnWork(this->ActionType, this->paramsData);

        if(OnEnd)
            Synchronize(SyncOnEnd);
    }
    catch(Exception &ex)
    {
        this->ex = &ex;

        Synchronize(SyncOnException);
    }
}

Так вот в событии OnEnd() создаётся ещё одна форма (вызывается методом ShowModal()) 
При нажатии кнопки  в этой модальной форме запускается ёщё один поток (нужно отправить кое-что в базу) поток имеет тот же тип что и первый (ThWorkManager).
Так вот вот этот 2 поток, запущенный из модальной формы выполняется лишь тогда, когдла закрывается модальная форма 
Почему???


--------------------
A good design always pays off.
PM MAIL   Вверх
sergey_85
Дата 10.10.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

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



Ха убираю у формы модальность и всё рабоает, но тогда я не смогу отловить в событии OnEnd()
кгда закрылась форма.
Код

void __fastcall OnEnd(void *data, ThWorkActionType ActionType)
{
  if(ActionType == taLoadAllResources)
 {
    TFrmResources *frmRes = 0;
    try
    {
        frmRes = new TFrmResources(FrmMain);    
        frmRes->Show(); // тут 2 поток запускается без проблем
        //frmRes->ShowModal(); //а вот так запускается только после закрытия формы!!!!
    }
    __finally
   {
        if(frmRes)
            delete frmRes;
   }
}
}




--------------------
A good design always pays off.
PM MAIL   Вверх
SVN74
Дата 10.10.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

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



Если создать вторую форму динамически (во вторичном потоке, в модальном режиме) , то второй поток не нужен, у второй формы при этом будет своя отдельная нить, а в первой форме при закрытии просто надо устроить ожидание пока не закроется вторая форма.

Это сообщение отредактировал(а) SVN74 - 12.10.2008, 23:38
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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