Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2014, 13:42   #1
AdrensAksidor
Новичок
Джуниор
 
Регистрация: 25.01.2014
Сообщений: 1
По умолчанию Работа с волокнами c++

Здравствуйте, пишу курсовую по ОС на тему "Эмуляция планировщика процессов с использованием волокон. Алгоритм "лотерейное планирование". В общем-то сам алгоритм мне понятен, но возникло два вопроса касательно волокон:
1) Планированием должно заниматься отдельное волокно, а остальные волокна должны выполнять какое-нибудь наглядное действие. Можете на словах подсказать, как лучше всего реализовывать планировщик? Просто без волокон мне это понятно, а с ними нет.
2) второй вытекает из первого: как реализовывать в волокнах выполнение какой-нибудь функции? Вот пытался для понимания написать такую простенькую программу, но она корректно не работает:
Код:
#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0400
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
void *fiber[1];
int i=10;
void WINAPI Func (PVOID lpParameter) {
i=i+1;
}
int main()

{  fiber[0]=ConvertThreadToFiber(NULL);
    fiber[0]=CreateFiber (0, Func, NULL);
   SwitchToFiber (fiber[0]);
cout << i;
}
Т.е. i у меня выводится равной 10, а не 11, а значит функция не работает как надо. Или ее нужно по другому описывать и вызывать? Прошу ответить хотя бы на второй вопрос (если пойму его, то смогу сам додуматься до реализации планировщика). Заранее спасибо
AdrensAksidor вне форума Ответить с цитированием
Старый 26.01.2014, 19:22   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
как лучше всего реализовывать планировщик
Не использовать волокна (если это не учебная задача)

2) В целом верно, но дополнительно созданное волокно Func после завершения должно запустить первое волокно main, которое получено из потока (сама программа - это главный поток) путём конвертирования.
Код:
VOID *fiber[2];//т.к. тут 2 волокна
int i=10;
void WINAPI Func (LPVOID lpParameter) {
i=i+1;
SwitchToFiber (fiber[1]);
}
int main()
{
    fiber[1]=ConvertThreadToFiber(NULL);//адрес "главного_потока-волокна"
    fiber[0]=CreateFiber (0, Func, NULL);//адрес нового волокна
   SwitchToFiber (fiber[0]);
printf("%i ",i);
}
P.S. Пример рабочий, но какой-то бессмысленный в плане использования волокон
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с псевдослучайными последовательностями (ПСП). Работа с цветом.(Pascal) Shick Помощь студентам 7 11.12.2013 19:25
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00