Промежуток времени t,количество потоков n,смещение по времени для потока T=t/n.К примеру 60секунд и 10 потоков - поток 0 запускается с задержкой 0*6=0сек,поток 1 с 1*6=6сек,поток 2 с 2*6=12мек,и т.д. Потоки нужно синхронизовать между собой, то есть если в 1м потоке произошла какая то задержка ,в остальных её надо учесть.Проблема в том что "саспендить" их нельзя,они должны выполнятся после старта все вместе, все время.Уже 2й день голову ломаю,как их синхронизировать по времени между собой.Может кто подскажет идею?
Хм - у тебя комп с n процессоров и каждый привязан к своему потоку? иначе suspend по иннициативе планировщика задач неизбежен Если же вмешательство планировщика допустимо, то обычная разделяемая между ними память с общей инфой решает проблему - создавать системный объект, заставляющий поток спать вовсе не обязательно.
_nic т.е. каждый раз сохранять эти 6 сек. сдвига? 1. упорядочить потоки по номеру; 2. каждому стартующему потоку надо выкладывать время старта в разделяемую память, например, а следующему при старте считывать и считать когда стартовать.
условие задачи совершенно запутанное и непонятное. наверно стоит начать с постановки задачи. те, чего конкретно вы хотите добиться?
например, делают ли потоки одно и тоже? или к них у каждого индивидуальная программа? и что значит "задержать не суспендя"? и чем вас не устраиват синхронизация в контрольных точках?
Потоки запускаются с заданным интервалом,поскольку в каждом потоке есть код с сокетами,то интервал может сбиватся,необходимо как то этот интервал восстанавливать.То есть синхронизировать потоки в ходе их работы между собой.
_nic синхронизировать в определенных точках? синхронизировать как: чтоб время было не меньше или чтоб время было не больше? напишите требования нормально. описание, цифры, допуски итд.
Юзай асинхронные сокеты и какой-нибудь управляющий поток, который будет принимать сообщения. Так что ли..
http://www.wasm.ru/forum/viewtopic.php?id=34891 Автору нужны асинхронные сокеты, но он упорно не желает их признавать.
Буду думать как обойтись голой математикой и всеголишь 2мя потоками =/ ЗЫ:в винде есть сис. время, на подобие количество секунд - "от чего то там"?
"Меня часто спрашивают, как сделать так, чтобы поток гарантированно запускался в течение определенного времени после какого-нибудь события — на пример, не позднее чем через миллисекунду после приема данных с последо вательного порта? Ответ прост: никак. Такие требования можно предъявлять к операционным системам реального времени, но Windows к ним не относится." Отсюда взято http://wm-help.net/books-online/book/59464/59464-26.html#h1