Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 2
Регистрация: 12.12.2009
Сообщений: 30
1

C++ & winapi - передача объектов переменных в функцию thread для их обработки?

27.04.2010, 15:41. Показов 1472. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include "WinThread.h"
//int flag;
 
LPVOID hf1,hf2,hf3,hf0;
 
void CALLBACK f2(void*)
{
    while(1){
    SwitchToFiber(hf1);
    }
}
 
void CALLBACK f3(void*)
{
    while(1){
    SwitchToFiber(hf1);
    }
}
 
void WinThread::second(void*)
{
    if(flag==1) {
            _endthread();
    }
}
 
DWORD CALLBACK third(LPVOID)                  // в эту функцию нужно передать переменную для её обработки
{
    hf1=ConvertThreadToFiber(NULL);
    hf2=CreateFiber(NULL,f2,hf1);
    hf3=CreateFiber(NULL,f3,hf1);
 
    while (1)
    {
        SwitchToFiber (hf2);
        SwitchToFiber (hf3);
    }
//        if (i==5) return 0;
//        else i++;
}
 
WinThread::WinThread()
{
        int f=8;
    thread2=CreateThread(NULL,NULL,third,NULL,NULL,NULL);
    getch();
}
в функцию third нужно передать переменную для её обработки, подскажите, пожалуйста, как это можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2010, 15:41
Ответы с готовыми решениями:

Для чего используеться передача структурных переменных в функцию?
Вообщем прошу помощи. 1) Для чего используеться передача структурных переменных в функцию? Как...

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в...

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 Мультимедиа аудиоконтроллер ...

Передача переменных в функцию
#include <iostream> int fun(int x, int y, int z); int main() { int x, y, z;

2
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.04.2010, 16:01 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Params
{
   int i_param1, i_param2....;
  bool b_param1....;
// и т.п.
} PARAMSTRUST;
 
PARAMSTRUST *Params = new PARAMSTRUST;
Params->iparam1 = 100;
// заполняем параметрами
thread2=CreateThread(NULL,NULL,third,(LPVOID)Params,NULL,NULL);
DWORD CALLBACK third(LPVOID params)
{
    PARAMSTRUST *Params = (PARAMSTRUST*)param;
    int i = patam->i_param1;
// тут делаем что надо
    delete Params;
    returm 0;
}
1
1 / 1 / 2
Регистрация: 12.12.2009
Сообщений: 30
28.04.2010, 15:26  [ТС] 3
Спасибо!

Добавлено через 22 часа 2 минуты
Нужна ваша помощь.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "WinThread.h"
 
LPVOID hf1,hf2,hf3;
iXml* Tr;
AnsiString str;
std::vector<GraphObj *> *GNO;
 
typedef struct Params
{
        int i,numnode;
        iXml *N;
        std::vector<GraphObj *> *GO;
 
}PARAMSTRUST;
 
iXml* VectorNode(iXml *N,vector<GraphObj *> *GO,int potoc,int num)
{
iXml *T;
GraphObj *Node = new GraphObj;
GNO->push_back(Node);
Node->LType->Caption = N->TypePrint();
N->GenRandomNum();
Node->LRandom->Caption = N->RandomPrint();
Node->Print(potoc,num);
      T = N->GetNode(0);
 return T;
};
 
void CALLBACK f2(void* param)
{
    while(1){
    SwitchToFiber(hf1);
    }
}
 
DWORD CALLBACK  third(LPVOID param)                     // этот поток обрабатывает структуру из объктов ввиде вектора
{
        PARAMSTRUST *P=(PARAMSTRUST *)param;
        hf1=ConvertThreadToFiber(NULL);
    hf2=CreateFiber(NULL,f2,hf1);
    while (P->N->TypePrint()!="Join")
    {
                if (P->N->TypePrint()=="Join")break;
                str = P->N->TypePrint();
                P->numnode++;
                P->N=VectorNode(P->N,P->GO,P->i,P->numnode);
        SwitchToFiber (hf2);
    }
        while(1)
        {
            SwitchToFiber (hf2);
        }
}
 
WinThread::WinThread(int i,iXml *N,vector<GraphObj *> *GNode)
{
        PARAMSTRUST *P=new PARAMSTRUST;
        P->i = i;
        P->N = N;
        P->GO = GNode;
        P->numnode = 0;
        threads=CreateThread(NULL,NULL,third,(LPVOID)P,NULL,NULL);
}
есть некая структура из объектов, ветки которой обрабатывает отдельный поток, веток может быть не счетное количество, а значит потоки должны быть динамическими.
На данном примере создается 3 потока
C++
1
2
3
4
5
6
7
8
9
 if(Tr->TypePrint()=="Fork"){
        while (i<Tr->CountIndex())
//        i=0;
        {
             WinThread *ProThread = new WinThread(i,Tr->GetNode(i),&NG);
             T.push_back(ProThread);
             i++;
        }
 }
Результат с двумя потоками таков:
Если выполнять потоки каждый в отдельности (по одному), то на выходе обработки результат положительный. Если выполняются два потока, то первый обрабатывает не до конца, второй проходит вектор положительно, и если выполняются три потока, то выводится ошибка об обращении к защищенной памяти другого процесса.
Как быть в этой ситуации, можно ли создать динамические потоки по этому принципу (через winapy) или есть другие варианты динамических потоков (TThread), или что здесь сделал не правильно, знаю есть объекты синхронизации, но в данном примере адреса данных у каждого потока разные, как и сами данные?
0
28.04.2010, 15:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2010, 15:26
Помогаю со студенческими работами здесь

Передача переменных в функцию
У меня в программе компилятор жалуется что не столько указателей я передаю как это исправить...

Передача переменных в функцию
Привет Пацаны :) Немогу понять работу функции. Ниже пример. &lt;?php function...

Передача переменных в функцию
Какой из следующих вариантов передачи переменных в функцию лучше всего использовать? Так сказать...

Передача переменных в функцию
Некоторую заминку у меня вызвала следующая ситуация. Предположим, есть класс С: public...

Передача 2х переменных в функцию
2 приватных переменных х и y есть void метод А вычисляет свои вопросы принимает, передает и...

Передача объектов в функцию: особенности
Здравствуйте! Пишу программу с применением классов, и возник один вопрос, на который то ли гугл не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru