Спать только для определенной функции

Есть ли способ сделать что-то вроде:

void f(){

sleep(500) 

}

но это повлияет только на функцию f, т.е. будет спать только f, а не вся программа.

подробнее: f - функция таймера

Я использую в сборщике С++ borland (bcb6)

Какие-либо предложения?


person user687459    schedule 13.08.2015    source источник
comment
ваше приложение многопоточное?   -  person Ali Kazmi    schedule 13.08.2015
comment
Да. он многопоточный. любой совет?   -  person user687459    schedule 13.08.2015
comment
тогда сон приведет к приостановке текущего потока при обнаружении сна. Другие потоки могут выполняться в это время   -  person Ali Kazmi    schedule 13.08.2015
comment
но я вызываю сон из события таймера, и есть по крайней мере 2 действия параллельного действия, и на самом деле, когда я ставлю сон (500), что-то в программе становится неправильным. у вас есть предположения относительно? любая идея для решения?   -  person user687459    schedule 13.08.2015
comment
Зачем спать в функции таймера!? Не могли бы вы вместо этого установить интервал таймера немного дольше?   -  person Bo Persson    schedule 13.08.2015
comment
1. Внутренний таймер сна фактически останавливает WinProc функцию!!! активно останавливает ваше приложение (потоки могут работать, но приложение зависает, поэтому, если вы рисуете какое-либо состояние, оно не будет обновляться в течение этого времени, создавая иллюзию остановки потоков) 2. Надеюсь, вы имеете в виду под потоками настоящие потоки, созданные с помощью CreateThread(...), а не просто параллельные компоненты таймера VCL (они вообще не параллельны !!!). Вместо этого вы можете использовать таймер, чтобы запланировать функцию f() на какой-то или новый поток, если предыдущая обработка уже завершена. Вы должны возвращаться с соревнований так быстро, как можете.   -  person Spektre    schedule 14.08.2015


Ответы (1)


Да. он многопоточный. любой совет?

Просто используйте std::this_thread::sleep_for, который приостановит только тот поток, в котором он был вызван.

person Shoe    schedule 13.08.2015
comment
Могу ли я вызвать его из метода таймера? потому что я предпочитаю не вызывать его из метода потока. а также у меня есть два потока, так как я могу использовать его для сна только для определенного потока (один из обоих потоков) - person user687459; 13.08.2015
comment
@ user687459 Это не метод. Это бесплатная функция в пространстве имен this_thread. И он будет автоматически работать только в том потоке, который выполняет эту строку. - person Shoe; 13.08.2015
comment
но эта строка находится в кадре таймера, и два потока работают параллельно в это время, и на самом деле я хотел бы, чтобы только эта функция спала в течение 500 мс, а другие потоки были живы. на этот раз я думаю, что это часть основного потока. - person user687459; 13.08.2015