Для прогеров. Много буковок. Ч1.
Итак, в борьбе с жарой, багами, недостатком финансов, и долгом перед френдами - победили последние два. Начал работать.
(не совсем так... Короче - держитесь )))) )
Первое чудесное открытие мне преподнес Майкрософт (спасибо ему, за санкции, но...) Я работаю с голым АПИ винды. На уровне SendMessage c необходимой нотифой для окна(или от оного, в зависимости от). Для непонимающих - в винде - ВСЕ, совершенно ВСЕ(ну почти, каретки, курсоры... там нет) это окна. Кнопки, статический текст для "огрупления"(он отличается только тем, что надо вовремя изменить его название, что бы можно иметь прямой доступ к конкретному элементу), просто статический текст, и так далее. ЭТО ОКНА. Ну... Все работает. Ну тут я решил немного побаловать пользователей статусной строкой и прогресс баром (кто не в курсах - это вот эта полосочка, которая заполняется по мере скачивания, переписывания, и так далее). Решил, что для двух элементов делать новое диалоговое окно тупо, посему решил спрятать имеющиеся элементы, и показать те, которые надо. А чо? И овцы целы (не надо контроллер и колбэк для диалога очередной мутить) и волки сыты (пользователи видят процесс как их система загибается). Влепил. Сразу же, при инициализации - все падает. Дебаг - показывает - падает на ините(на WM_CREATE, точнее) диалогового окна. Два вопроса, у меня там зашит ГетЛастЭрро, и он это все должен был выкинуть в месседж боксе. Не выкинул. Воткнул туда аборт (если не в курсе, то в винде он в режиме дебага ставит брекпоинт, и собсно, по коллстэку можно добраться до причины. ХУЙ. Просто все падает и все. Пошел на пошаговый трассерт. ГетЛасЭррорка - выдает - НЕТ ошибки. Но при этом - хэндл окна - нуль. Что собсно и вызывает остальное падение проги. Чешу яйца.... Тут вспомнил, что вроде как для прогрессбара я намутил всяких вкусностей, и оно требует дополнительной инициализации заранее. Ну требует, ладно, заинитил. Бууум-с. Не линкуется, ексепдед функцию которую я воткнул - не видит. Чешу яйца. Полез в МСДН. Написано, ну короче так, если под 95 - юзайте обязательно, а вот потом - можете забить - само подхватит. Чешу яйца и репу... Потом догадался, а КАКУЮ либу он просит (я работаю на статике, ДЛЛ терпеть не могу)? Глянул линкоопции цмд - а хуй там. У меня стандартная версия, а он, из за пары функций требует нечто покруче. Прилепил через прагму (лень было), скомпоновал... Вуаля... Все пашет.
Вопрос, нахуя надо была сия деза про то, что нахер не надо? Если можно было в ремарке той же воткнуть "При прямой работе с API WIN32 не забудьте подключить библиотеку такую то" ? Не, ну кто им мешал?!!
Ладно, победил.
Далее сеть. Ебался с багом неделю. Точнее по большей части с жарой, а баг это уже как дополнение было. Но тут таки решил прибить жучка.
Нашел в чем проблема. Ну почти... В общем, увеличил вайтстейт в 10 раз. Тем самым заткнул сервер (который тоже не дурак поотвечать, на что отвечает клиент, на что отвечает сервак, на что отвечает клиент... И так до бесконечности, а вот до обработки данных дело как то увы, не доходит), и увеличил время апдейта. Так как прямое ожидание тут никак не катит, пришлось выпендриватьсяс мультитредингом. Слип классная команда, но тут никак.
Все. Отлично отлавливает (кроме первого "Хэлло", причем - самого первого), отлично передает. Одна беда. После повторной передачи данных вываливается с ошибкой. Стал думать к чему бы это... Нашел. оказывается. Надо а) Не только убить тред б) Не только убить его по специальной команде в) Надо что бы тред вышел сам в ноль. (хотя тот же МСДН бьет себя пяткой в грудь, и гарантирует, что после убития треда он мертвее мертвого).
Почему - так - понятия не имею. Но факт, что при создании нового треда на основе имеющегося(через new), он продолжает работу как после саспенда, и собсно, с учетом того, что данных ноль, а он там что то помнит(ОТКУДА?!!! Все делетнуто и забыто), то пытается убить данные, которые давно убиты. Чем это заканчивается - понятно. В итоге - сделал все по книжечке - раз. Добавил переменную для выхода из цикла - два, и вуа ля. Все работает на ура. Почти.
Сча займусь криптомодулем..... Но эта сука как минимум 50 членов в классе тяне. Мать-мать-перемать. Но я таки сделаю неубиваемый ДДОСом сервер.
Из позитива - один мой ЖЖный френд таки сделал мне сервер. Пару гигагерц, пару гигабайт.... Ну короче, машинка СЧАСТИЯ..... И канал толстый. проблема - просил не подставлять канал... Значит, будем через прокладку работать. И овцы, и волки :))))
Всем привет :)))


