Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
lowercase
212 / 201 / 85
Регистрация: 09.05.2012
Сообщений: 494
#1

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

06.10.2012, 19:17. Просмотров 974. Ответов 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 минут
черд не в том разделе тему создал.
http://www.cyberforum.ru/cpp-beginners/thread1794452.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 19:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача указателя в функцию (C++):

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

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

Передача указателя на функцию
Доброго дня Форумчане. Хотелось бы узнать как вызывать функцию получив на нее...

передача указателя на функцию
Помогите исправить ошибку уже незнаю как быть В бивает ту ошибку error...

Передача в функцию указателя
Почему плохо передавать в функцию указатель на строку или массив и возвращать...

2
doctor_lecter
281 / 154 / 30
Регистрация: 22.09.2012
Сообщений: 283
06.10.2012, 19:27 #2
Лучший ответ Сообщение было отмечено lowercase как решение

Решение

Мне кажется должно быть как-то так
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);
}
0
lowercase
212 / 201 / 85
Регистрация: 09.05.2012
Сообщений: 494
06.10.2012, 19:34  [ТС] #3
всеравно не то указатель сp.begin как был 0x0 так и остался 0х0
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2012, 19:34
Привет! Вот еще темы с решениями:

Передача указателя на функцию
Есть класс в котором: typedef void(*setChar)(int x, int y, wchar_t...

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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