CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум C++ > Форум C++ Builder

Ответ Создать новую тему
 
Старый 02.02.2012, 12:23   #1
__bool
Форумчанин
 
Аватар для __bool
 
Регистрация: 13.06.2010
Адрес: Екб
Сообщений: 725
Репутация: 270 (211)
По умолчанию Многопоточность. Создать визуальный объект по завершению потока

По окончанию работы потока необходимо создавать на форме определенное количество TButton'ов, с определенными параметрами..
Как быть? Создавать их в самом потоке или же каким-то образом вернуть основному потоку(главному) информацию о предстоящей задаче и создать их в основном?

Добавлено через 14 часов 0 минут
Можно ли в дочернем потоке создавать визуальные vcl-объекты?
Если да, то, что лучше использовать критические разделы или мьютексы
Кто знает, прошу поделиться опытом
__bool вне форума
Другие темы раздела
Тип данных float C++ Builder
Здравствуйте. У меня проблема с типом данных. С текстового файла я считываю цифры типа 0.00300, 0.014500 и т.д. Затем мне нужно выполнить с ними операцию умножения и закинуть полученное в Edit.float v1, st=0.2; v1=StrToFloat(StringGrid1->Cells); cen=v1*st; Edit1->Text=FloatToStr(cen);.... Тип данных float
Избавиться от vcl-тормозов C++ Builder
Всем доброго времени суток. В кратце алгоритм программы такой: 1) Каждые 10 секунд IdHTTP грузит 5-10 страниц GET-запросом, Если на странице оказалась нужная информация, то: 2) Воспроизводится мелодия посредством BASS.DLL 3) Создаются кнопочки на главной форме Результат: Кнопки.... Избавиться от vcl-тормозов
Старый 02.02.2012, 14:11   #2
_engineer_
Форумчанин
 
Регистрация: 23.01.2012
Сообщений: 180
Репутация: 114 (71)
По умолчанию Re: Многопоточность. Создать визуальный объект по завершению потока

VCL в большой мере не является потока безопасной библиотекой. Да еще если мне не изменяет память большинство компонентов выполняются только в контексте главного потока. От сюда вывод: не создавать в потоке компонент пока не найдете в документации, что он потоко безопасный.

Мьютексы - самая медленная реализация синхронизации, но зато виден не только из своих потоков, но и из других процессов.
Критические разделы - самая быстрая синхронизация.

Критические разделы пример:
Вот определения моего класса для работы с данными в потоке (остальной свой код удалил)
hpp
Код C++
1
2
3
4
5
struct CRITICAL_SECTION_DATA
{
 TRTLCriticalSection critical_section;
 CRITICAL_SECTION_DATA();
};
Вот конструктор для автоматического создания секции
cpp
Код C++
1
2
3
4
CRITICAL_SECTION_DATA::CRITICAL_SECTION_DATA()
{
InitializeCriticalSection(&critical_section);
}
Вот функция в потоке которая обрабатывает данные и обращение к этим данным из других потоков должно быть запрещено
Код C++
1
2
3
4
5
6
void OpcThreadInput::ExeAlgoritm()
{
 EnterCriticalSection(&data_group->critical_section); запретил обращаться к данным экземпляра класса data_group
// сдесь обработка данных
 LeaveCriticalSection(&data_group->critical_section); открыл доступ к данным
}
_engineer_ вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 02.02.2012, 14:35  [ТС]   #3
__bool
Форумчанин
 
Аватар для __bool
 
Регистрация: 13.06.2010
Адрес: Екб
Сообщений: 725
Репутация: 270 (211)
По умолчанию Re: Многопоточность. Создать визуальный объект по завершению потока

Примерно так же делаю:
Как то странно у меня темы переплелись..
Вот результат работы моей программы используя Критические секции
Synchronize Передача параметров
__bool вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
Delphi для начинающих Создать визуальный компонент Часы
Создать визуальный компонент Часы, по умолчанию, показывающие системное время, содержащий свойство (+) Time с полями Hous , Minute. Значения этого свойства будут отображаться на форме в окне компонента. Cвойство Time – свойство, объект созданного вами класса. Создать свойство Часовой пояс, в...
juli.ya92
Visual Basic как создать визуальный эфект
Как создать визуальный эфект воспроизводимой музыки? Я сделал кое что но это не помне оно не сопровождается с музыкой а просто тупа переход по картинкам) Помогите плиз. Хотябы скажите как это сделать. Говорят с помошью библиотеки басс можно сделать но я не знаю как(((((
ilimdar
Delphi для начинающих Как создать визуальный эффект для плеера?
Как создать визуальный эффект для плеера?
kentaw
ASP.NET При попытке создать объект obj=Server.CreateObject('Name.ClassName') Возникает ошибка, 'Объект не поддерживает это свойство или метод.'
При попытке создать объект obj=Server.CreateObject('Name.ClassName') Возникает ошибка, 'Объект не поддерживает это свойство или метод.' А если на странице выставить язык <%@ Language=JScript %> То метод var obj = new ActiveXObject('Name.ClassName'); работает без проблем.
Maksim
Delphi Не могу создать Ole объект при создании нового потока TThread
Я создаю экземпляр этого класса interface uses Classes,ShellCtrls,SysUtils,ComObj,Variants,ExtCtrls,Windows,shellapi, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls, VCFI, ComCtrls; type TWordThread = class(TThread) private { Private declarations }
Fag2000@Ok.ru
Опции темы

Текущее время: 00:36. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru Яндекс.Метрика