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

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

Войти
Регистрация
Восстановить пароль
 
lowercase
212 / 201 / 34
Регистрация: 09.05.2012
Сообщений: 494
#1

Передача указателя в функцию - C++

06.10.2012, 19:17. Просмотров 924. Ответов 2
Метки нет (Все метки)

Здраствуйте. Если не охота читать гору текста то этот абзац + последущий за ним код можете пропустить. Задали на лабе сделать некий дестпетчер управления процесами в системе windows с использованием winapi. Суть программы в том, что создается очередь процесов, в виде связного списка. Программа, согласно заданой стратегии должна из очереди выполнять по одному процесу, до тех пор, пока очередь не станет пустой. В убогой методичке(имхо - она убогая, вот выросту и сделаю лучше) есть такой пример, который, кстати, как мне кажется, тоже является черт знает чем, и поэтому он вызвал у пару вопросов:
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
struct ocher{
  PROCESS_INFORMATION pi;
  int type_pr;
  ocher *next;
};
struct queue{
  ocher *bg;
}
queue create_queue(){//создание пустой очереди процессов
  queue x;
  x.bg=NULL;
  x.end=NULL;
  return x;
}
void add_queue(queue *q, PROCESS_INFORMATION pi, int type_pr);//добавление процесса в очередь
PROCESS_INFORMATION select_proc_queue(queue *q, int *type_pr);
//выбор процеса на выполнение согласно заданой стратегии
int main()
{
  queue cp = create_queue(); 
  int type_pr=1;
  PROCESS_INFORMATION pi;
  STARTUPINFO si;
  for (int i=0;i<100;i++){
    ZeroMemory(&si,sizeof(STARTUPINFO));
    CreateProcess(NULL, <имя файла>, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
    add_queue(&cp,pi,type_pr);
  }
  while (cp!=NULL){
    pi= select_proc_queue(cp,&type_pr);
    ResumeThread(pi.hThread);
    WaitForSingleObject(pi.hProcess,INFINITE);
    if (type_pr!=3){
      ZeroMemory(&si,sizeof(STARTUPINFO));
      CreateProcess(NULL, <имя файла>, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
      add_queue(&cp,pi,type_pr+1);
    }
  }
  return 0;
}
И так сама соль даной темы. Есть две строчки + струтуры описаные выше:
queue cp = create_queue();
void add_queue(queue *q, PROCESS_INFORMATION pi, int type_pr)

Каким образом в функции add_queue в конец очереди cp добавить новый елемент?
Кслову тема указателей с/с++ для меня всегда была проблемой По сему факту прошу помощи.

Добавлено через 7 минут
собсно у меня метод add_queue выглядит так:
C
1
2
3
4
5
6
void add_queue(queue* q, PROCESS_INFORMATION pi, PID pid){
    process* p = q->begin;
    while(p)
        p = p->next;
    p = init_process(pi, pid);// инициализация струтуры. 
}
здесь process аналог структуры ocher. увы этот код не рабоатет, при отладке я вижу что после вызова add_queue адрес cp.begin остается прежним

Добавлено через 6 минут
черд не в том разделе тему создал.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 19:17     Передача указателя в функцию
Посмотрите здесь:

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

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

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

Передача в функцию указателя на указатель - C++
Добавление нового элемента в начало списка: void Add_Beg(List **u, Data &amp;x) // Почему в 1 аргументе функции указатель на указатель? { ...

Передача ссылки и указателя в функцию - C++
передал ссылку в одну функцию - нормально, передал в другую - выводит неверное значение, тоже самое с указателем. Как можно это исправить?

Передача указателя на метод в функцию - C++
Подскажите плиз. Есть некий класс и в нём метод: ... DWORD WINAPI func(LPVOID lParam) { ... return 1; } ...

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

Передача указателя на вектор в функцию - C++
Путь есть целочисленный вектор, размер которого задается параметром. Мне надо передать в функцию указатель на него, в функции провести...

Передача указателя в функцию по ссылке - C++
Почему невозможно передать указатель в функцию по ссылке? void function(int &amp; (*a)){ ... ... ... } void main(){ int x; ...

Передача указателя на указатель в функцию - C++
Вопрос к знатокам: Есть абстрактный класс(Symbol) и его производный (Cross). Создаю указатель этого абстрактного класса(Symbol *first) ,...

Передача в функцию указателя на динамический массив - C++
Добрый день. Не могу понять одну вещь. Вот такой вот код работает. Создается массив из 10 элементов и указатель на него передается в...

Передача указателя на элемент массива в функцию - C++
Добрых времени суток) Есть массив, самый обычный. Нужно передвинуть влево все значения, кроме последнего (ибо мусор нам не нужен). Т.е....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
06.10.2012, 19:27     Передача указателя в функцию #2
Мне кажется должно быть как-то так
C++
1
2
3
4
5
6
7
8
9
void add_queue(queue* q, PROCESS_INFORMATION pi, PID pid){
    process* p = q->begin;
    if (p) {
        while(p->next)
            p = p->next;
        p->next = init_process(pi, pid);// инициализация струтуры. 
    } else
        p = init_process(pi, pid);
}
lowercase
212 / 201 / 34
Регистрация: 09.05.2012
Сообщений: 494
06.10.2012, 19:34  [ТС]     Передача указателя в функцию #3
всеравно не то указатель сp.begin как был 0x0 так и остался 0х0
Ответ Создать тему
Опции темы

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