Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ghost Writter
52 / 52 / 14
Регистрация: 09.12.2015
Сообщений: 214
#1

CALLBACK, void * и волокна - C++

03.01.2016, 07:41. Просмотров 259. Ответов 1
Метки нет (Все метки)

В общем пытаюсь разобрать университетскую задачку.

Поток main(у меня это simpleFourth) преобразует сам себя в нить, а затем создает еще три нити. После этого главная нить потока по очереди передает управление каждой из трех остальных нитей. Выполнив действие, каждая из трех нитей возвращает управление главной нити.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#undef MessageBox
#define MessageBox(s) MessageBoxA(NULL, s, "Fiber Demo", MB_OK)
#define size 4
 
void *fibers[size];
 
void fiber0(void *)
{
    while(1)
    {
        for(int i = 1; i < size; i++)
            SwitchToFiber(fibers[i]);
    }
}
 
void CALLBACK fiber1(void *)
{
    while(1)
    {
        MessageBox("Fiber 1");
        SwitchToFiber(fibers[0]);
    }
}
 
void CALLBACK fiber2(void *)
{
    while(1)
    {
        MessageBox("Fiber 2");
        SwitchToFiber(fibers[0]);
    }
}
 
void CALLBACK fiber3(void *)
{
    while(1)
    {
        MessageBox("Fiber 3");
        SwitchToFiber(fibers[0]);
    }
}
 
void simpleFourth()
{
    fibers[0] = ConvertThreadToFiber(NULL);
    fibers[1] = CreateFiber(0, fiber1, NULL);
    fibers[2] = CreateFiber(0, fiber2, NULL);
    fibers[3] = CreateFiber(0, fiber3, NULL);
    fiber0(NULL);
}
Так вот... Что значит CALLBACK в этом случае? Я там, конечно, уже в вики читал(хотя там даж примеров то нет таких), что результатом функции может быть какой-то там код, алгоритм и еще что-то. Здесь вообще не понятно.

Еще, по адресу void functionName(void *) - что значит в этом случае void * как параметр? Я понимаю, что это указатель на область памяти. Понимаю, что если было бы так void *getFunction = &functionName; Но, что делает void * в качестве аргумента?

И сами волокна(почему то в методичке написаны нити, хотя нить это thread, а в методике thread это поток...). Для чего они нужны? Написаны, вроде как, для изменения приоритета выполняемого кода. Но в моем представлении это сейчас выглядит как простой поочередный вызов функций, не более.

Помогите разобраться с вопросами.

Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 07:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос CALLBACK, void * и волокна (C++):

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента - C++
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

Дважды вычислить значение выражения, используя функции возвращающие void и не void - C++
Хай!Помогите решить Дважды вычислить значение выражения, используя функции возвращающие void и не void....

Typedef void (WINAPI *GLEND)(void), как вызывать? - C++
импортирую метод GLEND glmethod = (GLEND) GetProcAddress(hModule, &quot;glEnd&quot;); как его теперь коректно вызвать: typedef void...

delete или new (typeid(void*))(void*) - C++
Доброе время суток. Пишу список. Телом каждого элемента (el) списка является void указатель(body). (предполагается что тело элемента...

Что значит void(*f)()=(void(*)()func? - C++
void(*f)()=(void(*)())func; Объясните, пожалуйста, что значит этот код.

Error C2084: функция "void mehanizm:print(void)" уже имеет текст реализации - C++
Добрый день, я столкнулся с проблемой вывода элемента на экран, выбивает: &quot;error C2084: функция &quot;void mehanizm::print(void)&quot; уже имеет...

1
Renji
1925 / 1323 / 298
Регистрация: 05.06.2014
Сообщений: 3,808
03.01.2016, 08:48 #2
Цитата Сообщение от Ghost Writter Посмотреть сообщение
Так вот... Что значит CALLBACK в этом случае?
Соглашение о вызове. Задает низкоуровневую реализацию механизма передачи аргументов.
Цитата Сообщение от Ghost Writter Посмотреть сообщение
Еще, по адресу void functionName(void *) - что значит в этом случае void * как параметр?
Третий аргумент CreateFiber. Системой не используется, нужен только чтоб программист мог чего ни будь функции передать.
Цитата Сообщение от Ghost Writter Посмотреть сообщение
И сами волокна(почему то в методичке написаны нити, хотя нить это thread, а в методике thread это поток...). Для чего они нужны?
Волокна - лайт-версия thread. Нужны чтобы реализовать руками то что в случае с потоками делается автоматически и офигевать от своей крутости. В теории они еще экономят сколько-то системных ресурсов, но я слабо себе представляю задачу, в которой это не будет экономией на спичках.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2016, 08:48
Привет! Вот еще темы с ответами:

LNK2019: ссылка на неразрешенный внешний символ "void __cdecl run(void)" (?run@@YAXXZ) в функции _wmain - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;cmath&quot; using namespace std; class A { private : double *x; double...

не получается передать массив из "void Vvod" в "void CalculatingEstimates" - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void CalculatingEstimates(int Pp,Stydent mas); void Vvod(); struct...

в чем разница между void f(int &n) и void f(int &&n) - C++
:help:

CALLBACK - C++
Здравствуйте, уважаемые форумчане. Передо мной стоит задача записи звука с микрофона в файл. Как считывать в буфер я разобрался. Но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru