Взамидействие_потоков

Тема в разделе "WASM.WIN32", создана пользователем AlexCab, 20 июн 2009.

  1. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    В общем такая ситуация, программа загружает четыре dll, запускает в каждой из них по потоку, каждый поток создаёт
    главное окно и в нём edit, потоки опщаются с программой посредством сообщений,
    программа отпраляет двум потокам сообщение о завершении, потоки уничтожают окна и завершаются, но как только какой-то
    из оставшихся потоков получает какое либо сообщение всё наглухо виснет, хотя если закрыть предварительно окна в ручную
    ничего подобного не происходит.
    Как изловть жука?
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Необходимость видеть код.
     
  3. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    Код в архиве (хотя сомневаюсь что поможет:)
    Оба потока почти одновременно вызывают DestroyWindow возможен ли сбой из-за этого?
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Очень милый исходник.
    Один может попробовать вычленить минимальный код, приводящий к багу. После этого, если всё не встанет на свои места, можно перевести в псевдокод и запостить здесь функции из длл: основную функцию потока, функцию, крутящую цикл GetMessage\DispatchMessage и функцию обработки сообщений. Скорее всего вызов DestroyWindow не к месту хотя.

    ...
    Код (Text):
    1. АСМ Кнц_фнкч_окн Г (Буф_сбщ,Флг_дст)
    2.         (
    3.         \\Проверка сообщения выхода
    4.         mov ecx,Буф_сбщ
    5.         mov eax,[ecx + 4h]
    6.         cmp eax,0002h
    7.         je  Вых_фнк
    8.         \\Обработка сообщения по умолчанию
    9.         mov eax,[ecx + 0Ch]
    10.         push eax
    11.         mov eax,[ecx + 08h]
    12.         push eax
    13.         mov eax,[ecx + 04h]
    14.         push eax
    15.         mov eax,[ecx + 00h]
    16.         push eax
    17.         call [DefWindowProc]
    18.         Вых_фнк:
    19.         pop     edi esi ebx
    20.         pop ebp
    21.         \\Удаление парамтров из стека
    22.         pop ebx
    23.         add esp,10ш
    24.         push ebx
    25.         xor ebx,ebx
    26.         \\Выход
    27.         ret
    Умываем руки. Удачного поиска ;)
     
  5. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    Если не создавть окон всё работает, что-то происходит при создании или разрушении окна, программа или виснет полностью (все потоки) или вылетае без всякого сообщения. Если у кого есть пример кода (создание окна потоком) поделитесь, буду очень благодарен:)
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    AlexCab
    оффтоп: можно поинтересоваться, что это за препроцессор RS_B (или не препроцессор?) на русском языке?:))
     
  7. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    http://www.wasm.ru/forum/viewtopic.php?id=29886
    А здесь пожалуйста по теме.