Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetWaitableTimer(), как задать период срабатывания таймера 
V
    Опции темы
wallstreet
Дата 18.4.2012, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Последовал вашим советам и вроде все заработало, но зависание при уменьшении матрицы осталось все равно.
Честно признаться работало и раньше все так же, когда вместо предложенного вами варианта я использовал в потоке1 просто 
Код

vv.resize(::scrlh);

Возможно я просто еще догнать не могу сути мысли, но до подобных синтаксических конструкций типо:
Код

(it++)->resize(::scrlh)

я самостоятельно бы не дошел, во всяком случае сейчас, и меня это ужасно расстраивает. smile 



Ссылка на проект

Это сообщение отредактировал(а) wallstreet - 18.4.2012, 15:19
PM MAIL   Вверх
GremlinProg
Дата 18.4.2012, 17:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



это всего лишь С++,
то же самое можно было записать проще:
Код

vv.resize( new_size );
for( auto It = vv.begin() ; It != vv.end() ; ++It ){
  It->resize( new_size );
}

и это было бы правильно

p.s.:на счет зависания, пока не смотрел, пока нет возможности


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
wallstreet
Дата 18.4.2012, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я вот тут подумал, таймер запускает потоки и отрисовывает раст с задаными параметрами, в часности с размером ::scrlh, который я беру из глобальной переменной в первом потоке и инициализирую сх и су, а в этот момент уже поменял глобальную переменную через диалог1. 
И создается такая ситуация, что я меняю глобальную ::scrlh нажимая "ОК", именно в тот момент когда отрисовывается в WM_PAINT раст со старым значением ::scrlh, которая защищена критической секцией csShared. Так вот если защитить в диалоге1 изменение глобальной ::scrlh с помощью секции csShared, что бы инициализация глобальной ::scrlh проходила между тактами отрисовки по таймеру?
Я спрашиваю, потому, что на домашнем компьютере это подтормаживание не видно почему-то)))
PM MAIL   Вверх
GremlinProg
Дата 19.4.2012, 07:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



я притормаживаний ни каких не вижу,
но тут конечно еще есть проблемы синхрнизации:
1. scrlh меняется в диалоге (в основном потоке) и читается в потоке 1,
есть риск попасть в такую ситуацию, когда scrlh изменится в середине цикла:
Код

for(auto it=vv.begin(); it!=vv.end(); (it++)->resize(::scrlh));

в конечном счете, получится искажение массива

в потоке scrlh читается под секцией csX, если в диалоге так же менять ее под секцией csX, то все будет хорошо
2. GetObject в 3-м потоке совершенно не нужна, она нужна в WM_PAINT, под секцией csShared,

ничего стршного тут конечно нет, т.к. GetObject защищен той же csShared,
просто зачем тратить время 3-го потока на работу основного (WM_PAINT)

пока больше ничего военного не заметил

Добавлено @ 07:34
Цитата(wallstreet @  18.4.2012,  22:45 Найти цитируемый пост)
И создается такая ситуация, что я меняю глобальную ::scrlh нажимая "ОК", именно в тот момент когда отрисовывается в WM_PAINT раст со старым значением ::scrlh, которая защищена критической секцией csShared. Так вот если защитить в диалоге1 изменение глобальной ::scrlh с помощью секции csShared, что бы инициализация глобальной ::scrlh проходила между тактами отрисовки по таймеру?

это я еще не очень понял, т.е. ты думаешь, что если изменения scrlh защитить csShared, то отрисовка массива будет синхронизирована с этим изменением?

если так, то нет,
это просто приведет к тому, что ты не сделаешь эти 2 операции одновременно ( WM_PAINT и scrlh ), hSemaphoreX у тебя и так актуализирует изменения пользователя на сколько это только возможно, т.к. после
Код

ReleaseSemaphore(hSemaphoreX, 1, NULL);

первый поток, если не загружен, сразу начинает работу с новыми параметрами

Это сообщение отредактировал(а) GremlinProg - 19.4.2012, 07:35


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
wallstreet
Дата 19.4.2012, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(GremlinProg @  19.4.2012,  07:28 Найти цитируемый пост)
в потоке scrlh читается под секцией csX, если в диалоге так же менять ее под секцией csX, то все будет хорошо2. GetObject в 3-м потоке совершенно не нужна, она нужна в WM_PAINT, под секцией csShared,

Исправил. Вроде больше вопросов нет.
Всем спасибо)
PM MAIL   Вверх
feodorv
Дата 19.4.2012, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(wallstreet @  19.4.2012,  10:55 Найти цитируемый пост)
Исправил. Вроде больше вопросов нет.
Всем спасибо) 

То есть всё? На этом завершаем?)))
Тогда, как любит говорить bsa, пометь тему решённой)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
wallstreet
Дата 26.4.2012, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ок
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

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


 




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


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

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