Синхронизация дочерних потоков между собой

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 2 ноя 2009.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Промежуток времени t,количество потоков n,смещение по времени для потока T=t/n.К примеру 60секунд и 10 потоков - поток 0 запускается с задержкой 0*6=0сек,поток 1 с 1*6=6сек,поток 2 с 2*6=12мек,и т.д. Потоки нужно синхронизовать между собой, то есть если в 1м потоке произошла какая то задержка ,в остальных её надо учесть.Проблема в том что "саспендить" их нельзя,они должны выполнятся после старта все вместе, все время.Уже 2й день голову ломаю,как их синхронизировать по времени между собой.Может кто подскажет идею?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Хм - у тебя комп с n процессоров и каждый привязан к своему потоку? иначе suspend по иннициативе планировщика задач неизбежен ;) Если же вмешательство планировщика допустимо, то обычная разделяемая между ними память с общей инфой решает проблему - создавать системный объект, заставляющий поток спать вовсе не обязательно.
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    http://www.wasm.ru/forum/viewtopic.php?pid=284253#p284253
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _nic
    т.е. каждый раз сохранять эти 6 сек. сдвига?

    1. упорядочить потоки по номеру;
    2. каждому стартующему потоку надо выкладывать время старта в разделяемую память, например, а следующему при старте считывать и считать когда стартовать.
     
  5. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    условие задачи совершенно запутанное и непонятное. наверно стоит начать с постановки задачи. те, чего конкретно вы хотите добиться?
     
  6. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    например, делают ли потоки одно и тоже? или к них у каждого индивидуальная программа?
    и что значит "задержать не суспендя"?
    и чем вас не устраиват синхронизация в контрольных точках?
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Согласен. Я тоже не понял, чего нужно автору.
     
  8. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Потоки запускаются с заданным интервалом,поскольку в каждом потоке есть код с сокетами,то интервал может сбиватся,необходимо как то этот интервал восстанавливать.То есть синхронизировать потоки в ходе их работы между собой.
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    _nic
    синхронизировать в определенных точках?
    синхронизировать как: чтоб время было не меньше или чтоб время было не больше?

    напишите требования нормально. описание, цифры, допуски итд.
     
  10. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    _nic
    Т.е. блокирующие сокеты?
     
  11. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    Юзай асинхронные сокеты и какой-нибудь управляющий поток, который будет принимать сообщения. Так что ли..
     
  12. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Наверно аффтар игру пишет, и хочет так добиться правильной очерёдности хода.
     
  13. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    http://www.wasm.ru/forum/viewtopic.php?id=34891
    Автору нужны асинхронные сокеты, но он упорно не желает их признавать.
     
  14. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Буду думать как обойтись голой математикой и всеголишь 2мя потоками =/
    ЗЫ:в винде есть сис. время, на подобие количество секунд - "от чего то там"?
     
  15. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _nic
    GetSystemTime()?

    P.S. по таймеру запускать не пробовали - SetTimer()?
     
  16. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    "Меня часто спрашивают, как сделать так, чтобы поток гарантированно запускался в течение определенного времени после какого-нибудь события — на пример, не позднее чем через миллисекунду после приема данных с последо вательного порта? Ответ прост: никак. Такие требования можно предъявлять к операционным системам реального времени, но Windows к ним не относится."

    Отсюда взято
    http://wm-help.net/books-online/book/59464/59464-26.html#h1