LINUX.ORG.RU

time() rand()


0

0

значится написал функцию : rand_per_sec () { time_t vrem1; time_t vrem2; int i; int n; for(i=0;i+1;i++) { vrem1 = time(NULL); n = 4.0 * rand()/(RAND_MAX); do { vrem2 = time(NULL); } while ((vrem2-vrem1)<=10); return(n); } }

Смысл: возвращает сл. число через опр. число сек. (10); Проблема: загрузка ЦПУ 99%; Вопрос: подскажите более элегантный способ решить задачу.

Огромное спасибо.

anonymous

блин еще раз rand_per_sec () {

time_t vrem1;

time_t vrem2;

int i;

int n;

for(i=0;i+1;i++) {

vrem1 = time(NULL);

n = 4.0 * rand()/(RAND_MAX);

do {

vrem2 = time(NULL);

} while ((vrem2-vrem1)<=10);

return(n);

} }

anonymous
()

2anonymous (*) (09.06.2006 19:15:55):

1 способ:

man 2 alarm ; man 2 pause

2 способ:

man 2 select

Наверное, еще можно понапридумывать ...

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

> Наверное, еще можно понапридумывать

usleep || nanosleep в общем-то корректнее и позволяет обработать ситуацию "раз в N времени или при сигнале".

usleep - только для SIGALRM, nanosleep - все сигналы. Немаскированные естественно.

pause с setitimer - никогда не видел применённым. Хотя должно быть вполне работоспособно.

nblx
()
Ответ на: комментарий от Die-Hard

> Не совсем то, что просили, но, может, пойдет.

по крайней мере это то, что я смог понять по приведённому коду и тех-заданию:

> Смысл: возвращает сл. число через опр. число сек. (10); Проблема: загрузка ЦПУ 99%; Вопрос: подскажите более элегантный способ решить задачу.

хотя конечно на верность в последней инстанции не претендую

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.