Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
1

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

06.10.2012, 19:17. Просмотров 1448. Ответов 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 минут
черд не в том разделе тему создал.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2012, 19:17
Ответы с готовыми решениями:

Передача указателя на шаблонную функцию в другую функцию
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция benchmark принимает...

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

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

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

2
284 / 157 / 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
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
06.10.2012, 19:34  [ТС] 3
всеравно не то указатель сp.begin как был 0x0 так и остался 0х0
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2012, 19:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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