2015-02-10 3 views
0

Я хочу, чтобы имитировать процесс видео, но я не очень понимаю, как код моделирования процесса выполняется с помощью fork() (POSIX), но теперь я собираюсь сделать это в Windows. Можно ли использовать createProcess()? Мне просто нужно что-то вроде руководство/подсказки только на самом деле.Эмуляция процесса

Видео: Видео моделируется как поток, который пытается получить процессор 60 раз в секунду и использует 40% процессор. Это будет довольно требовательное воспроизведение видео со скоростью 60 кадров в секунду. Подобно аудио-симулятор игнорирует кеширование, драйверы и видеокарты. Согласно аудио, видео сравнивается с опцией реального времени.

Немножко пример кода в Posix:

/* We emulate video by using 40% cpu and waking for 60fps */ 
#define VIDEO_INTERVAL (1000000/60) 
#define VIDEO_RUN (VIDEO_INTERVAL * 40/100) 
void emulate_video(struct thread *th) 
{ 
    unsigned long long deadline; 
    sem_t *s = &th->sem.stop; 
    struct timespec myts; 

    th->decasecond_deadlines = 1000000/VIDEO_INTERVAL * 10; 
    deadline = get_usecs(&myts); 

    while (1) { 
     deadline = periodic_schedule(th, VIDEO_RUN, VIDEO_INTERVAL, 
      deadline); 
     if (!trywait_sem(s)) 
      return; 
    } 
} 

ответ

2

В Windows имитировать fork с CreateThread, если это не следует exec, в этом случае вы CreateProcess ЕЭС.

Системный вызов fork создает клон вашего процесса. Системный вызов exec загружает новую программу в ваш процесс, заменяя старую программу.

+1

Это правда, что во многих случаях CreateThread() является наиболее подходящей заменой fork(), но обратите внимание, что вы не можете просто ожидать, что она будет работать без внесения других (обычно существенных) изменений в код. Темы имеют одинаковое адресное пространство (глобальные переменные и т. Д.), Тогда как fork() создает новое адресное пространство, которое является копией существующего. Существующий код OPs скорее всего будет ожидать нового адресного пространства, и он будет неудачным, если он не получит его. –

+0

@HarryJohnston: В этом случае похоже, что OP просто хочет запустить цикл занятости в другом потоке, поэтому он должен работать нормально. В большинстве других случаев вы правы. – Gabe

+0

О, я понимаю, что вы имеете в виду. Да, это может быть так. –

Смежные вопросы