В общем такая ситуация, программа загружает четыре dll, запускает в каждой из них по потоку, каждый поток создаёт главное окно и в нём edit, потоки опщаются с программой посредством сообщений, программа отпраляет двум потокам сообщение о завершении, потоки уничтожают окна и завершаются, но как только какой-то из оставшихся потоков получает какое либо сообщение всё наглухо виснет, хотя если закрыть предварительно окна в ручную ничего подобного не происходит. Как изловть жука?
Код в архиве (хотя сомневаюсь что поможет Оба потока почти одновременно вызывают DestroyWindow возможен ли сбой из-за этого?
Очень милый исходник. Один может попробовать вычленить минимальный код, приводящий к багу. После этого, если всё не встанет на свои места, можно перевести в псевдокод и запостить здесь функции из длл: основную функцию потока, функцию, крутящую цикл GetMessage\DispatchMessage и функцию обработки сообщений. Скорее всего вызов DestroyWindow не к месту хотя. ... Код (Text): АСМ Кнц_фнкч_окн Г (Буф_сбщ,Флг_дст) ( \\Проверка сообщения выхода mov ecx,Буф_сбщ mov eax,[ecx + 4h] cmp eax,0002h je Вых_фнк \\Обработка сообщения по умолчанию mov eax,[ecx + 0Ch] push eax mov eax,[ecx + 08h] push eax mov eax,[ecx + 04h] push eax mov eax,[ecx + 00h] push eax call [DefWindowProc] Вых_фнк: pop edi esi ebx pop ebp \\Удаление парамтров из стека pop ebx add esp,10ш push ebx xor ebx,ebx \\Выход ret Умываем руки. Удачного поиска
Если не создавть окон всё работает, что-то происходит при создании или разрушении окна, программа или виснет полностью (все потоки) или вылетае без всякого сообщения. Если у кого есть пример кода (создание окна потоком) поделитесь, буду очень благодарен
AlexCab оффтоп: можно поинтересоваться, что это за препроцессор RS_B (или не препроцессор?) на русском языке?)