Реализация тайм-аута на функции, возвращая значение

В 10,04 следующие драйверы были доступны:

  • nvidia-96 - GPU в пределах от серии 2 GeForce (за исключением GeForce2 GTS/GeForce2 Pro, GeForce2 Ti и GeForce2 Крайний) к серии 7 Geforce поддерживаются
  • nvidia-173 - GPU в пределах от серии 5 GeForce к серии 9 Geforce поддерживаются
  • текущий Nvidia (195) - GPU, такие как серия 6 GeForce или более новый поддерживаются

, примечания совместимости непосредственно из описания пакета (должен быть 3-й абзац), и не изменились очень в 12,04. Стоит отметить, что текущий Nvidia переместился от 180 законченных до 185 и оттуда к 195 во время 10,04 жизненных циклов.

Используя текущий Nvidia, возможно, работал очень хорошо в 10,04. Но необходимо понять, как Nvidia поддерживает их собственные драйверы. Это не ограничено драйверами Linux/Unix и относится к Windows подобным способом, и AMD/ATI не отличается там.

Для Linux, Nvidia поддерживает 3 версии драйверов: Один для очень старых карт (2000-2005, я знаю, что это не точно, но позволяет нам попытаться сохранить его максимально простым) с очень ограниченным набором функций, один для скорее более новых карт (2005-2010) с большим количеством функций и один с поддержкой последних карт (2010 вперед) и всеми функциями, которые они обеспечивают. Это сделано для сокращения усилия по обслуживанию как можно больше. Если реализация поддержки нового ряда или функции повреждает поддержку более старых карт или делает их нестабильными, затем это - жертва, которая будет сделана, и пользователи тех карт должны переключиться на более старый, но все еще сохраняемый/совместимый ряд драйвера.

Также необходимо знать немного больше о конкретной микросхеме. Википедия говорит, что это - микросхема с 2007 , однако Серия 7 Geforce была выпущена в 2006, и проекты самые низкого уровня основаны на предыдущем ряде или еще ранее. Таким образом, на самом деле говорили о недорогом дизайне с 2005 или 2004.

Мой совет в Вашем случае: Удаляют все старые драйверы и устанавливают nvida-173 драйвер, должно быть достаточно выполнить Compiz (я сделал тот назад в 2008 с 08,04, версия назад, чем был 140 или 160), однако микросхема не может быть достаточно быстрой для выполнения Единицы, Вы могли попытаться отключить размытость в CCSM, если это не помогает, необходимо использовать 2D Единицу.

11
задан MGSoto 3 September 2009 в 00:08
поделиться

2 ответа

Вот общее решение, которое позволяет заключить любой метод в тайм-аут:

http://kossovsky.net/index.php/2009/07/csharp-how-to -limit-method-execution-time /

Он использует полезную перегрузку Thread.Join , которая принимает тайм-аут в миллисекундах вместо ручного использования таймеров. Единственное, что я бы сделал иначе, это поменял местами флаг успеха и значение результата, чтобы они соответствовали шаблону TryParse , как показано ниже:

public static T Execute<T>(Func<T> func, int timeout)
{
    T result;
    TryExecute(func, timeout, out result);
    return result;
}

public static bool TryExecute<T>(Func<T> func, int timeout, out T result)
{
    var t = default(T);
    var thread = new Thread(() => t = func());
    thread.Start();
    var completed = thread.Join(timeout);
    if (!completed) thread.Abort();
    result = t;
    return completed;
}

И вот как вы могли бы его использовать:

var func = new Func<string>(() =>
    {
        Thread.Sleep(200);
        return "success";
    });
string result;
Debug.Assert(!TryExecute(func, 100, out result));
Debug.Assert(result == null);
Debug.Assert(TryExecute(func, 300, out result));
Debug.Assert(result == "success");

Вы также можете добавить перегрузки которые принимают Action вместо Func , если вы хотите выполнить метод, который не возвращает значение.

34
ответ дан 3 December 2019 в 01:53
поделиться

Похоже, вы выполняете блокирующее чтение / запись. Что вы хотите сделать, так это неблокирующее чтение / запись.

Вероятно, есть способ сообщить COM-порту, что вы хотите неблокировать.

Вы уверены, что таймауты не работают с commstudio? может быть, вам нужно сделать что-то особенное для их инициализации.

В любом случае, вы хотите прочитать как можно больше данных, и если ни один из них не доступен, тайм-аут (в зависимости от значения тайм-аута). Вы захотите продолжить цикл, пока нет данных и ошибок, а затем вернуть условие тайм-аута, если ничего не доступно.

Сделайте так, чтобы ваша функция чтения возвращала целое число. отрицательные значения = значение ошибки, например -1 = тайм-аут, положительное количество прочитанных байтов ... по крайней мере, я бы так поступил.

2
ответ дан 3 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

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