На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Ошибка MessageBox при использовании ClientSocket , builder6
    Всем доброго.
    Отправляю структуру посредством ClientSocket. Все работает нормально. Но вот в одном месте случился глюк. Захотел перед отправкой сделать запрос на подтверждение: "Application->MessageBox" и вот тут фигня какая-то. Во время разработки на локалхосте работает нормально. С ноута выхожу в инет через мобильник - на этом месте прога вылетает сразу с ошибкой. На компе стационарном вылетает, но не всегда.
    Если убираю MessageBox, то все работает нормально. :wall:
    ExpandedWrap disabled
      struct sendserver
                    {
                    int a;
                    int X;
                    int Y;
                    int id;
                    int stage;
                    TColor Color;
                    int Flag;
                    char Mes[150];
                    sdoska Doska[5][5];
                    };
      sendserver msend;
      ...
      if (Application->MessageBox("Отказаться от задания?",Application->Title.c_str(),MB_YESNO+MB_ICONQUESTION) == IDYES)
        {
          msend.a = 1;
          msend.X = xx;
          msend.Y = yy;
          msend.id = MyId;
          msend.stage = Stage;
          msend.Flag = 0;
          msend.Color = CColor;
          ClientSocket1->Socket->SendBuf(&msend,sizeof(sendserver));
       
        }
      Ошибка скорее всего в другом месте. MessageBox запускает собственный цикл обработки сообщений и, вероятно, в каком-нибудь обработчике и падает.
        работаешь с потоками?

        Добавлено
        короче если через потоки, то скорее всего нужно делать синхронизацию.VCL потоки не безопасны просто.
          Цитата =Nike= @
          сделать запрос на подтверждение: "Application->MessageBox" и вот тут фигня какая-то
          ...
          Если убираю MessageBox, то все работает нормально

          Да, похоже на многопоточность. Попробуй заменить Application->... на виндовую MessageBox(Application->MainForm->Handle,...), и убрать обращение к Application->Title
            а ещё лучше будет ,если не испытывать судьбу. А делать изначально правильно
            там где выводишь месагу:
            ExpandedWrap disabled
              Synchronize(ShowMessageBox);


            отдельной функцией
            ExpandedWrap disabled
              void __fastcall ShowMessageBox(void)
              {
                  bool pr= Application->MessageBox(L"title",L"Сообщение ", MB_OK + MB_ICONINFORMATION);
              }


            глобальной для модуля сделать
            ExpandedWrap disabled
              bool pr;
              Спасибо за советы всем.
              Штука вобщем такая. У меня прием и передача осуществлялась через переменную msend. Объявил еще одну такого же типа, теперь принимаю в одну, отправляю другую. Ошибка исчезла... :-?
                Потом опять появится, фигли... если так решать проблему с потоками.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0651 ]   [ 16 queries used ]   [ Generated: 29.02.24, 05:11 GMT ]