Задержанные вызовы функции

Это природа математики конечной точности. Если вы попытаетесь сохранить значение, которое не может быть представлено точно, в лучшем случае вы получите наиболее близкое представимое значение.

Посмотрите на двоичный файл:
999900032 -> 111011100110010100001110000000
999900000 -> 11101110011001010000110 11 00000

Таким образом, представление этого числа будет требуют двух дополнительных битов точности. Предположительно, это больше, чем float обеспечивает в вашей системе.

80
задан ROMANIA_engineer 28 August 2017 в 12:13
поделиться

4 ответа

Это - действительно очень плохой дизайн, уже не говоря об одиночном элементе отдельно плохой дизайн.

Однако, если действительно необходимо задержать выполнение, вот то, что можно сделать:

BackgroundWorker barInvoker = new BackgroundWorker();
barInvoker.DoWork += delegate
    {
        Thread.Sleep(TimeSpan.FromSeconds(1));
        bar();
    };
barInvoker.RunWorkerAsync();

Это, однако, вызовет bar() на отдельный поток. Если необходимо звонить bar() в исходный поток, Вы, возможно, должны были бы переместиться bar() вызов в RunWorkerCompleted обработчик или сделать немного взламывания с SynchronizationContext.

5
ответ дан John Bubriski 24 November 2019 в 09:45
поделиться

Это походит на управление создания и этих объектов и их потребности взаимозависимости к управляемому внешне, а не между самими классами.

7
ответ дан Adam Ralph 24 November 2019 в 09:45
поделиться

Ну, я должен был бы согласиться с точкой зрения "дизайна"..., но можно, вероятно, использовать Монитор для уведомления того, когда другой проходит критический раздел...

    public void foo() {
        // Do stuff!

        object syncLock = new object();
        lock (syncLock) {
            // Delayed call to bar() after x number of ms
            ThreadPool.QueueUserWorkItem(delegate {
                lock(syncLock) {
                    bar();
                }
            });

            // Do more Stuff
        } 
        // lock now released, bar can begin            
    }
2
ответ дан Marc Gravell 24 November 2019 в 09:45
поделиться

Нет никакого стандартного способа задержать вызов к функции кроме использовать таймер и события.

Это походит на GUI анти-шаблон задержки вызова к методу так, чтобы можно было быть уверены, что форма закончила размечать. Не хорошая идея.

0
ответ дан ng5000 24 November 2019 в 09:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: