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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Неизвестная мне ошибка с листом http://www.cyberforum.ru/cpp-beginners/thread1630567.html
Привет, я тут делаю программу, которая добавляет, убирает, меняет местами и пишет лист. Я, правда, еще не так хорошо знаю листы и принципы их работы, чтобы понять, что это у меня за ошибка. И вообще, больше половины написанного может быть полной пургой. Но все равно, помогите, если не трудно. Вот код. Я его еще не доделал, но добавление в лист работает :D #include <iostream> #include <conio.h>...
C++ Нужен совет начинающему программисту Доброго времени суток! Поделитесь экспертным мнением товарищи программисты... Сейчас я дочитываю Лафоре (осталось пару глав) и хотел бы узнать, что мне дальше изучить.. беда вот в чем: город в котором я живу маленький, не город - городишко) и никому Juniorы и программисты не нужны, вернее будет сказать программисты знающие только основы C++... понятное дело, что на одном Лафоре я не остановлюсь и... http://www.cyberforum.ru/cpp-beginners/thread1630551.html
Русский язык C++
char szNonColorEmbeddedMsg; int iNonColorEmbeddedMsgLen = 0; for (size_t pos = 0; pos < strlen(szMsg) && szMsg != '\0'; pos++) { if (!((*(unsigned char*)(&szMsg) - 32) >= 0 && (*(unsigned char*)(&szMsg) - 32) < 224)) continue; if(pos+7 < strlen(szMsg)) {
C++ Класс "Длинных чисел", основные арифметические операции (найти причины и способы устранения ошибки)
Всем привет:) помогите пожалуйста решить проблему: делаю класс длинных чисел, обязательно нужно использовать конструкторы(по умолчанию, с параметрами и копирования), а так же осуществить основные арифметические операции с этими числами. Все операции прописал, но что-то пошло не так и не возвращается их результат. Уже часа 3 сижу, не могу понять ошибку. Вот код: Файл ClassLong.h #include...
C++ удаляется ли объект или происходит утечка памяти? http://www.cyberforum.ru/cpp-beginners/thread1630524.html
Добрый день, подскажите, при таком коде, удаляется ли объект или происходит утечка памяти? std::list<A*> entities; entities.push_back(new A("name1")); for (auto it = entities.begin(); it != entities.end();) { if ((*it)->getName() == "name1")
C++ В дереве найти такой пусть, чтобы сумма узлов была равна заданному числу Задача: В дереве найти такой пусть, чтобы сумма узлов была равна 50. В целом, понятно. У меня вышло найти тот узел, в котором эта сумма становится 50, но возникли проблемы с самим выводом пути до этого узла... Возможно я выбрал не тот обход для этой цели, мне бы ваш совет г.г подробнее

Показать сообщение отдельно
Ghost Writter
 Аватар для Ghost Writter
52 / 52 / 14
Регистрация: 09.12.2015
Сообщений: 210
03.01.2016, 07:41     CALLBACK, void * и волокна
В общем пытаюсь разобрать университетскую задачку.

Поток 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 это поток...). Для чего они нужны? Написаны, вроде как, для изменения приоритета выполняемого кода. Но в моем представлении это сейчас выглядит как простой поочередный вызов функций, не более.

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

Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru