Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.237.15.145] |
|
Сообщ.
#1
,
|
|
|
Всем доброго.
Отправляю структуру посредством ClientSocket. Все работает нормально. Но вот в одном месте случился глюк. Захотел перед отправкой сделать запрос на подтверждение: "Application->MessageBox" и вот тут фигня какая-то. Во время разработки на локалхосте работает нормально. С ноута выхожу в инет через мобильник - на этом месте прога вылетает сразу с ошибкой. На компе стационарном вылетает, но не всегда. Если убираю MessageBox, то все работает нормально. 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)); } |
Сообщ.
#2
,
|
|
|
Ошибка скорее всего в другом месте. MessageBox запускает собственный цикл обработки сообщений и, вероятно, в каком-нибудь обработчике и падает.
|
Сообщ.
#3
,
|
|
|
работаешь с потоками?
Добавлено короче если через потоки, то скорее всего нужно делать синхронизацию.VCL потоки не безопасны просто. |
Сообщ.
#4
,
|
|
|
Цитата =Nike= @ сделать запрос на подтверждение: "Application->MessageBox" и вот тут фигня какая-то ... Если убираю MessageBox, то все работает нормально Да, похоже на многопоточность. Попробуй заменить Application->... на виндовую MessageBox(Application->MainForm->Handle,...), и убрать обращение к Application->Title |
Сообщ.
#5
,
|
|
|
а ещё лучше будет ,если не испытывать судьбу. А делать изначально правильно
там где выводишь месагу: Synchronize(ShowMessageBox); отдельной функцией void __fastcall ShowMessageBox(void) { bool pr= Application->MessageBox(L"title",L"Сообщение ", MB_OK + MB_ICONINFORMATION); } глобальной для модуля сделать bool pr; |
Сообщ.
#6
,
|
|
|
Спасибо за советы всем.
Штука вобщем такая. У меня прием и передача осуществлялась через переменную msend. Объявил еще одну такого же типа, теперь принимаю в одну, отправляю другую. Ошибка исчезла... |
Сообщ.
#7
,
|
|
|
Потом опять появится, фигли... если так решать проблему с потоками.
|