Напишите код, чтобы заставить использование ЦП отобразить синусоидальную волну

На самом деле вы делаете глупую ошибку в контроллере.

@RequestMapping(value = "/productdetail/{id}", method = RequestMethod.GET)
public String productDetail(@PathVariable("id") Long serviceId) {

    Optional<Service> service = repository.findById(serviceId);
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("service", service);

    System.out.println("teste: " + serviceId);

    return "productdetail";
}

Вы определяете модель и вид. Согласно вашему требованию ваш контроллер будет выглядеть как

@RequestMapping(value = "/productdetail/{id}", method = RequestMethod.GET)
public String productDetail(@PathVariable("id") Long serviceId, Model model) {

    Service service = repository.getFirstById(serviceId);

    model.addAttribute("service", service);

    System.out.println("teste: " + serviceId);

    return "productdetail";
}

Попробуйте и ответьте, работает он или нет

25
задан Viktor Dahl 21 September 2012 в 09:06
поделиться

5 ответов

Интервал времени потока в Windows составляет 40 мс, iirc, так, чтобы могло бы быть большое количество для использования в качестве 100%-й метки.

unsigned const TIME_SLICE = 40;
float const PI = 3.14159265358979323846f;
while(true)
{
    for(unsigned x=0; x!=360; ++x)
    {
        float t = sin(static_cast<float>(x)/180*PI)*0.5f + 0.5f;
        DWORD busy_time = static_cast<DWORD>(t*TIME_SLICE);
        DWORD wait_start = GetTickCount();
        while(GetTickCount() - wait_start < busy_time)
        {
        }
        Sleep(TIME_SLICE - busy_time);    
    }
}

Это дало бы период приблизительно 14 секунд. Очевидно, это предполагает, что нет никакого другого значительного использования CPU в системе, и что Вы только выполняете его на единственном ЦП. Ни один из них не действительно настолько распространен в действительности.

15
ответ дан flodin 28 November 2019 в 21:35
поделиться

Вот немного изменен решение @flodin в Python:

#!/usr/bin/env python
import itertools, math, time, sys

time_period = float(sys.argv[1]) if len(sys.argv) > 1 else 30   # seconds
time_slice  = float(sys.argv[2]) if len(sys.argv) > 2 else 0.04 # seconds

N = int(time_period / time_slice)
for i in itertools.cycle(range(N)):
    busy_time = time_slice / 2 * (math.sin(2*math.pi*i/N) + 1)
    t = time.clock() + busy_time
    while t > time.clock():
        pass
    time.sleep(time_slice - busy_time);    

кривая ЦП А может быть подстроена с помощью time_period и time_slice параметры.

10
ответ дан Community 28 November 2019 в 21:35
поделиться

Хорошо у меня есть другое, вероятно, ЛУЧШЕЕ решение, чем мой первый ответ.

Вместо того, чтобы пытаться управлять ЦП, вместо этого сцепите в приложение для диспетчера задач, вынудите это потянуть то, к чему Вы хотите это вместо результатов ЦП. Примите объект GDI, который строит график и т.д. Вид "Обмана", но они не сказали, что необходимо было управлять ЦП

Или даже сцепить вызов от диспетчера задач, который получает % ЦП, возвращая результат синуса вместо этого.

7
ответ дан Neil N 28 November 2019 в 21:35
поделиться

С буквально сотнями (тысячи?) потоков ПК работает сегодня, единственный способ, которым я могу думать для ровного приближений, состоял бы в том, чтобы опросить использование ЦП максимально быстро, и если % использования был ниже, где это должно быть на кривой, для исчерпывания сокращенного метода, который просто взбалтывает числа. Это, по крайней мере, поднимет типичное низкое использование при необходимости, но я не могу думать о хорошем способе ПОНИЗИТЬ его без того, чтобы так или иначе брать под свой контроль другие потоки и выполнения чего-то, такие как принуждение их приоритета ниже.

3
ответ дан Neil N 28 November 2019 в 21:35
поделиться

Что-то вроде этого:

while(true)
{
    for(int i=0;i<360;i++)
    {
       // some code to convert i into radians if needed
       ...
       Thread.Sleep(Math.Sin(i)*something_that_makes_it_noticeable_number_of_ms+something_that_makes_it_non_negative)
       // some work to make cpu busy, may be increased to bigger number to see the influence on the cpu.
       for(j=0;j<100;j++);
    }
}
-2
ответ дан Alex Reitbort 28 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

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