На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование под PalmOS"
Правила раздела просты:
1. Будьте вежливыми.
2. Задавате вопросы только по теме. Пользовательские вопросы (у меня не работает пальм) являются оффтопиком. Пользуйтесь конференциями palmz.in, hpc.ru, ihand.ru .
3. Поиск вареза запрещен.
4. Пользуйтесь поиском. Не надейтесь, что кому-то доставляет удовольствие отвечать в сотый раз на один и тот же вопрос.
  
> Проблема с загрузкой ресурсов
    Привет всем.
    Возникла проблема с загрузкой ресурсов.
    У меня в программе вызывается окно по событию: сработал аларм. Завожу два аларма. По срабатыванию первого аларма, окно вызывается без проблем, но если на него не отреагировать и дождаться пока сработает второй аларм и вызовется это же самое окно, то креш. С управлением окнами вроде всё в порядке. Проблема в следующем коде:
    ExpandedWrap disabled
          MemHandle           resH;
          MemHandle           snzStrListH;
          MemHandle           resFollowH;
          MemHandle           flwStrListH;
          Char                *resP;
          Char*               resFollowP;
          resH = DmGetResource (strListRscType, MyResStringList);
          resP = (Char *) MemHandleLock(resH);
          resP += StrLen(resP) + 1;  
          MemMove(&snzListCount, resP, sizeof(UInt16));
          resP += sizeof(UInt16);
          snzStrListH = SysFormPointerArrayToStrings(resP, snzListCount);

    далее делаю тоже самое, но для другого списка строк, хранящегося в ресурсах:
    ExpandedWrap disabled
          resFollowH = DmGetResource (strListRscType, MyEmailResStringList);
          resFollowP = (Char *) MemHandleLock(resFollowH);
          resFollowP += StrLen(resFollowP) + 1;
          MemMove(&flwListCount, resFollowP, sizeof(UInt16));
          resFollowP += sizeof(UInt16);
          flwStrListH = SysFormPointerArrayToStrings(resFollowP, flwListCount);


    Сами ресурсы представляют собой обычный набор строк:
    ExpandedWrap disabled
      STRINGTABLE ID MyResStringList
       "" "Name1" "Name2" "Name3" "Email"

    Что я делаю неправильно при загрузке ресурсов.
    Спасибо
      модальная форма, которая выскакивает на аларм, крутит свой мэйнлуп и не отпускает его, пока форма не будет закрыта. вы лочите мэмхэндл потом приходит второй аларм, а залоченный хэндл лочится снова. оттого и может быть крэш.

      возможные выходы:
      1. юзать немодальную форму. при следующем аларме принудительно закрывать существующую форму
      2. как только нужна в мэмхэндле отпадает, сразу же его разлочивать (кстати, по коду не видно, где это происходит).

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


          Рейтинг@Mail.ru
          [ Script execution time: 0,0404 ]   [ 16 queries used ]   [ Generated: 28.03.24, 10:17 GMT ]