Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Работа с функциями волокна


Автор: AdrensAksidor 25.1.2014, 14:32
   Здравствуйте. Начал изучать волокна и сразу же столкнулся с проблемой вызова функции для них. Начал с написания простенькой программы, но она не работает корректно:
Код

#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;
}

    Всеравно продолжает выводить 10. Или нужно работать со структурами, как в найденном мною примере:
Код

typedef struct
{
    int counter,fiberID;
    LPVOID nextFiber;
} *PFiberData;
 
VOID WINAPI Executable( LPVOID lpParam )
{
    PFiberData pfd = (PFiberData)lpParam;
    pfd->counter++; 
    cout << pfd->fiberID + 1  << " " <<  pfd->counter - 1 << " " <<pfd->counter << endl;
    SwitchToFiber(pfd->nextFiber);
}
 ?

  

Автор: Dem_max 27.1.2014, 04:10
Ну так то все правильно, выводит 10 и программа завершается

user posted image

Автор: xvr 27.1.2014, 12:41
Удивительно, что оно вообще что то вывело. Где SwitchToFiber в конце Func?

Автор: AdrensAksidor 27.1.2014, 13:37
Цитата(xvr @  27.1.2014,  12:41 Найти цитируемый пост)
Удивительно, что оно вообще что то вывело. Где SwitchToFiber в конце Func?

   Да, я знаю. Прошу прощения, но уже во всем разобрался

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)