Подскажите по многопоточности

Тема в разделе "WASM.WIN32", создана пользователем kori, 9 дек 2005.

  1. kori

    kori New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2005
    Сообщения:
    4
    Привет всем.Спецы подскажите, как быть с такой проблемой:

    сначало создается диалог, а он в свою очередь создает тред

    CreateProcessом и передает свой дескриптор в lparame для обратной связи (обновление инфы и тд).Но вот проблема, хочеться как-то сделать что б из диалога можно было этот тред остановить\прекратить.Но вопрос: как хранить дескриптор треда??? локально -- стэк затирается, а если в статической памяти, то какая же здесь будет многопоточность, если память каждый раз будет затираться значением дискриптора нового потока???



    Если я написал полный бред не обижайтесь.



    Если можно киньте пару ссылок по теме



    пока от этой идее отказался но вот еще какая фигня:

    допустим работают 3 потока (потоки получают письма с POP3 сервера).Вот работают себе все нормально, но через промежуток времени один из них просто останавливается!!!!

    Я написал тот же алгоритм на перле но там та же байда.

    Я думаю, может это связано с тем, что мыльный сервер офигивает, когда у него 3 чувака с одним логином качают одновременно письма.Или в цикле где-то слип нужен?



    Напишите пожалуйста кто, что думает по этим вопросам.



    ЗЫ:и еще вопрос (извиняюсь, что совсем не в кассу но так что б все сразу) подскажите какой нибудь web/irc чат, где можно пообщаться по теме программирования и тд(форум штука классная никто и не спорит, но хочется пообщаться и в риалтайме).На этом закругляюсь.
     
  2. _DaO_

    _DaO_ New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2005
    Сообщения:
    2
    Адрес:
    Afghanistan
    Еси я праильно понял, то твой диалог - это главная прога, которая создает дополнительные потоки, у каждого из которых есть свой threadID, ну короче дескриптор thread_а, если ты хочешь из диалоговой проги управлять этими тредами, то какие проблемы - хранишь просто в локальных переменных эти дескрипторы и пользуешься ими, можешь завести массивчик дескрипторов и т.п.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    глобальный и динамический.
     
  4. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    _DaO_
    Не забывай, при выходе из процедуры окна они теряются -> только массив дескрипторов в глобальных переменных или выделить память под них.

    kori


    Поток сам по себе не может остановиться, для этого он должен сделать sleep или сам себя остановить, вывод только один сервер не передаёт данные в сокет и трэд висит на этом сокете (recv(...)) в ожидании чего-либо :) Скорее это особенность сервака.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Есть серверы, запрещающие одновременный доступ. Но при этом выводящие что-то типа "mailbox locked". Так что выводи для отладки всё, что пишет сервер. Но чаще так как я сказал — одновременный доступ запрещён.
     
  6. _DaO_

    _DaO_ New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2005
    Сообщения:
    2
    Адрес:
    Afghanistan
    SteelRat

    Да, сорри, оговорился, конечно в глобальных. Но если программирование на примитивном уровне, т.е. стандартный win32 каркас, то можно завести локальные переменные в функции WinMain, но при этом надо обрабатывать сообщения от диалога в самой функции WinMain до вызова функции DispatchMessage в цикле сообщений (она передает сообщения окну), тогда эти локальные в функции WinMain переменные будут доступны. Ну это подход - через здц. Глобальные - легче.
     
  7. kori

    kori New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2005
    Сообщения:
    4
    _DaO_

    Не совсем так.Этот диалог появляется при выборе меню.



    Можно сделать так: в главном окне, допустим в WM_CREATE ,выделять GlobalAlloc_ом

    память(глобальна), а диалог при создании треда записывает в нее :

    свой хандл

    хандл треда



    При WM_COMMAND он ищет свой хандл и потом получает хандл треда. Перед EndDialog_ом подчищает за собой.



    IceStudent





    Одновременный доступ, как не странно, разрешен.Видимо по этому сервак и глючит, когда работает один тред - все нормально.