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

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

Восстановить пароль Регистрация
 
lowercase
 Аватар для lowercase
211 / 200 / 34
Регистрация: 09.05.2012
Сообщений: 494
06.10.2012, 19:17     Передача указателя в функцию #1
Здраствуйте. Если не охота читать гору текста то этот абзац + последущий за ним код можете пропустить. Задали на лабе сделать некий дестпетчер управления процесами в системе 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++
C++ Передача указателя на функцию
Передача в функцию указателя C++
C++ Передача указателя в функцию
C++ Передача указателя на дерево в функцию
Передача ссылки и указателя в функцию C++
Передача указателя в функцию по ссылке C++
C++ Передача указателя на вектор в функцию

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 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
 Аватар для lowercase
211 / 200 / 34
Регистрация: 09.05.2012
Сообщений: 494
06.10.2012, 19:34  [ТС]     Передача указателя в функцию #3
всеравно не то указатель сp.begin как был 0x0 так и остался 0х0
Yandex
Объявления
06.10.2012, 19:34     Передача указателя в функцию
Ответ Создать тему
Опции темы

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