Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2015, 09:23   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А просто через указатель нельзя узнать?
Это костыли. Можно но не нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2015, 18:56   #12
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Короче создал отдельный класс TLicense, включил в главный поток, а из других потоков проверяю и изменяю параметры класса через Synchronize, с критическими секциями геморой получается
Antony41 вне форума Ответить с цитированием
Старый 16.06.2015, 20:46   #13
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это костыли. Можно но не нужно.
Согласен, Однако это не самые худшие "костыли" плюс отличное средство от геморроя. Если существует возможность решить поставленную задачу с меньшими усилиями, более простым кодом - почему бы и нет.

Последний раз редактировалось Turbine; 16.06.2015 в 20:48.
Turbine вне форума Ответить с цитированием
Старый 16.06.2015, 21:48   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Если существует возможность решить поставленную задачу с меньшими усилиями, более простым кодом - почему бы и нет.
Потому что в этом случае придется четко расставить приоритеты таких усилий - на кого оно придется, на ПО или программиста. И если второе далеко не самый худщий вариант, поскольку программист наставит всяких проверок и защит, то первое будет обязательно приводить к AV в самых неожиданных условиях эксплуатации. Банально - разные менеджеры памяти, одни слябовые другие... забыл термин, SLOB кажется. Ну не важно - разница в выделении памяти, если утрировать проблему, и "фсе". Финита ля Мистраль. Приплыли.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2015, 21:58   #15
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Turbine, Что то я совсем туплю. передать указатель на переменную, а потом то что находится под указателем (наша переменная) менять уже из доп. потока?

Main.pas
Код:
...

var
MyVar1: integer;
MyThread: TMyThread;
...

procedure TMainForm.Button1.Click(Sender: TObject)
begin
MyThread := TMyThread.Create(true);
MyThread.MyVar1 := @MyVar1;
MyThread.Suspend;
end;
Код:
type
TMyThread = class(TThread)
public
MyVar1: PInteger;
...
end;

procedure TMyThread.Execute;
begin
while not Terminated do
begin
inc(MyVar1^);

//или проверять 
if MyVar1^ = 10000 then
break;
end;
end;
Я Вас правильно понял?

Последний раз редактировалось Antony41; 16.06.2015 в 22:10. Причина: исправил
Antony41 вне форума Ответить с цитированием
Старый 17.06.2015, 15:14   #16
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Вы поняли меня правильно. Можно для повышения надежности и кросс там чего-то еще
Код:
if UInt32(MyVar1^)=10000;
Переменная тогда должна быть тоже UInt32
Для себя делаю так + обработка исключений и тесты, тесты, тесты... под x86 и x64

Последний раз редактировалось Turbine; 17.06.2015 в 15:18.
Turbine вне форума Ответить с цитированием
Старый 17.06.2015, 18:59   #17
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Не чёто я совсем запутался))) а это не тоже самое что ли? что я смотрю под указателем в эту же переменную, которая кстати в момент обращения к ней одного потока, может быть занята чтением или записью другого потока, и AV не возникнет?
Короче не тоже ли самое?
Код:
UInt32(MyVar^) := 1000
и
Код:
MyVar := 1000
И можно ли обратиться одновременно из двух потоков к этой переменной для чтения? с записью понятно что нет

Последний раз редактировалось Antony41; 17.06.2015 в 19:02.
Antony41 вне форума Ответить с цитированием
Старый 17.06.2015, 19:30   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно ли обратиться одновременно из двух потоков к этой переменной для чтения?
Для чтения - да. В любой момент, и ничего не будет. А вод для записи придется другие потоки притормаживать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2015, 20:05   #19
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

спасибо большое разжевали. Это как с файлами читать хоть сколько пользователей может, а записывать только один
Antony41 вне форума Ответить с цитированием
Старый 17.06.2015, 21:05   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
читать хоть сколько пользователей может, а записывать только один
Ну не... Файлы то как раз можно запрещать и так и сяк. Я часто, работая в Фокспро, сталкиваюсь с тем, что фокс блочит файлы, открытые им даже на чтение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить состояние потока своей функцией Shouldercannon Общие вопросы Delphi 6 01.10.2013 09:56
Узнать состояние TPopupMenu Alter Компоненты Delphi 2 07.03.2011 13:21
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
Узнать состояние кнопок мыши Cold_Night Общие вопросы Delphi 3 07.06.2009 21:36
Узнать состояние подключения Hottabych Работа с сетью в Delphi 8 03.03.2008 18:10