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

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

Восстановить пароль Регистрация
 
Ghost Writter
 Аватар для Ghost Writter
35 / 35 / 9
Регистрация: 09.12.2015
Сообщений: 185
03.01.2016, 07:41     CALLBACK, void * и волокна #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 это поток...). Для чего они нужны? Написаны, вроде как, для изменения приоритета выполняемого кода. Но в моем представлении это сейчас выглядит как простой поочередный вызов функций, не более.

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

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 07:41     CALLBACK, void * и волокна
Посмотрите здесь:

C++ Callback функция
C++ Не понимаю CALLBACK
CALLBACK. Нужна помощь C++
Что такое CALLBACK функция...... C++
Просмотр списка с вызовом callback функции C++
Callback + switch. Break needed C++
CallBack C++ C++
Typedef void (WINAPI *GLEND)(void), как вызывать? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,956
03.01.2016, 08:48     CALLBACK, void * и волокна #2
Цитата Сообщение от Ghost Writter Посмотреть сообщение
Так вот... Что значит CALLBACK в этом случае?
Соглашение о вызове. Задает низкоуровневую реализацию механизма передачи аргументов.
Цитата Сообщение от Ghost Writter Посмотреть сообщение
Еще, по адресу void functionName(void *) - что значит в этом случае void * как параметр?
Третий аргумент CreateFiber. Системой не используется, нужен только чтоб программист мог чего ни будь функции передать.
Цитата Сообщение от Ghost Writter Посмотреть сообщение
И сами волокна(почему то в методичке написаны нити, хотя нить это thread, а в методике thread это поток...). Для чего они нужны?
Волокна - лайт-версия thread. Нужны чтобы реализовать руками то что в случае с потоками делается автоматически и офигевать от своей крутости. В теории они еще экономят сколько-то системных ресурсов, но я слабо себе представляю задачу, в которой это не будет экономией на спичках.
Yandex
Объявления
03.01.2016, 08:48     CALLBACK, void * и волокна
Ответ Создать тему
Опции темы

Текущее время: 23:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru