Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.87
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
#1

Сигналы в windows - C++

21.08.2011, 17:08. Просмотров 4584. Ответов 11
Метки нет (Все метки)

Как генерировать сигналы в среде windows? Информация по сигналам в линуксе гуглится, а вот для windows не найду. Ну кроме того что SIGINT это ctrl+c. А как сгенерировать SIGABRT и SIGTERM например? Моя программа-набросок:

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 <iostream>
#include <csignal>
#include <windows.h>
using namespace std;
 
 
void sigintHandler(int x)
{
    cout<<"sigintHandler was start\nNow exit";
    signal(SIGINT,sigintHandler);
    Sleep(3000);
    exit(EXIT_SUCCESS);
};
 
void sigabortHandler(int x)
{
    cout<<"sigabortHandler was start\nNow exit";
    signal(SIGABRT,sigabortHandler);
    Sleep(3000);
    exit(EXIT_SUCCESS);
};
 
int main()
{
    signal(SIGINT,sigintHandler);
    signal(SIGABRT,sigabortHandler);
    start:
    cout<<"\nEnter yout choice:\n1 to normal exit"
     <<"\n2 (or ctrl+c) to SIGINT"
     <<"\nabort to SIGABRT\n";
    int choice=0;
    Sleep(5000);
    cin>>choice;
    if (choice==1)
     return 0;
 
    else if(choice==2)
     raise(SIGINT);
 
    else if(choice<1 || choice>2)
     goto start;
 
 
 
    return 0;
 
}
P.S да, язнаю что using namespace и goto не хорошо, но так как набросок для себя то я позволяю себе такие слабости как goto и быдлокод
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2011, 17:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сигналы в windows (C++):

Сигналы - C++
Здравствуйте!! Помогите пожалуйста с заданием!!! Нужно написать программу. В которой: 1)Процесс-отец пораждает 4 дочерних процесса,...

Виртуальный класс. Сигналы - C++
#ifndef MODULE_H #define MODULE_H #include &lt;QWidget&gt; class Module : public QWidget { Q_OBJECT public: ...

сигналы SIGINT SIGABORT - C++
нужно организовать программу перехвата сигналов: 1. SIGINT - при нажатии ctrl+c 2. SIGABRT - при вызове функции abort() первое...

Звуковые сигналы с++. Получение 8-битных звуков - C++
Сегодня на паре на с++ был минус 8-ми битный Гимн РФ, подскажите или дайте ссылку, хочу разобраться с звуковыми сигналами.)

Что выбирать для дальнейшего изучения Windows 7 c Win32 или Windows 8 c WinRt? - C++
Стоит или ещё изучать Windows 7 в целом и Win32? Сейчас много людей все ещё пользуется этим, но не уверен стоит ли начинать, ведь будет...

Программировани Shell для Windows (замена Windows Explorer) - C++
Если да. то поделитесь пожалуйста исходниками или на худой конец ссылками на OpenSource проектами на эту тему.Заранее благодарен.

11
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2011, 17:17 #2
Цитата Сообщение от Gepar Посмотреть сообщение
Как генерировать сигналы в среде windows?
Есть такая функция
C++
1
MessageBeep()
, нужен winuser.h
Вот как вариант звука окончания чего-либо
C++
1
MessageBeep(MB_ICONEXCLAMATION);
)
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
21.08.2011, 17:32  [ТС] #3
-=ЮрА=-, ээээ, я не о winapi, я хотел узнать как генерировать abort по принципу как и интерактивный сигнал прерывания (его я могу генерировать нажав ctrl+c), а как отправляется сигнал от windows типа SIGABRT (Дейтел пишет что тестировать его надо отправив программе abort, а как это сделать не написано) и SIGTERM (запрос на завершение).

Добавлено через 48 секунд
В общем я не о тех сигналах что пищат, я о сигналах от os для программы
0
Gera777
4 / 4 / 1
Регистрация: 09.07.2010
Сообщений: 12
21.08.2011, 19:16 #4
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
/* signal example */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
 
char tmpfilename [L_tmpnam];
 
void terminate (int param)
{
  printf ("Terminating program...\n");
  remove (tmpfilename);
  exit(1);
}
 
int main ()
{
  void (*prev_fn)(int);
 
  prev_fn = signal (SIGTERM,terminate);
  if (prev_fn==SIG_IGN) signal (SIGTERM,SIG_IGN);
 
  tmpnam (tmpfilename);
  
  /* code here */
 
  return 0;
}
Инфу можно тут почитать : http://www.cplusplus.com/reference/clibrary/csignal/signal/
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
21.08.2011, 19:37  [ТС] #5
Gera777, ну SIGTERM я и сам могу вызвать / "выбросить", а что с остальными? Я хочу чтобы именно от системы поступил сигнал и программа прореагировала на это (как это идёт с ctrl+c во время выполнения программы и запуском обработчика SIGINT), ведь для этого же сигналы и сделаны как я понял. Просто писать в коде программы
C++
1
raise(SIGABRT);
глупо же как-то.

Добавлено через 2 минуты
+ мне нравиться вставка
C++
1
/* code here */
мне что-то подсказывает что здесь чего-то не хватает.
0
Gera777
4 / 4 / 1
Регистрация: 09.07.2010
Сообщений: 12
21.08.2011, 20:00 #6
Gepar, я же ссылку кинул
C++
1
void (*signal(int sig, void (*func)(int)))(int);
В качестве sig можно вставить:
SIGABRT (Signal Abort) Abnormal termination, such as is initiated by the abort function.
SIGFPE (Signal Floating-Point Exception) Erroneous arithmetic operation, such as zero divide or an operation resulting in overflow (not necessarily with a floating-point operation).
SIGILL (Signal Illegal Instruction) Invalid function image, such as an illegal instruction. This is generally due to a corruption in the code or to an attempt to execute data.
SIGINT (Signal Interrupt) Interactive attention signal. Generally generated by the application user.
SIGSEGV (Signal Segmentation Violation) Invalid access to storage: When a program tries to read or write outside the memory it is allocated for it.
SIGTERM (Signal Terminate) Termination request sent to program.

А func - указатель на функцию-обработчик.
0
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,020
21.08.2011, 20:04 #7
Gera777, вопрос не в том, как обработать сигналы, а как направить сигнал программе извне. Я вот не уверен, что в Windows есть такая богатая поддержка сигналов, какая описана в POSIX. Хотя я мало знаю, например, про Win7.
1
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
22.08.2011, 14:06  [ТС] #8
Gera777, вот grizlik78 меня понял правильно Просто генерировать самому вручную разные сигналы не интересно же, так от них вся практическая польза теряется. У меня помимо 7ки то и XP есть, но как в windows их генерировать вообще что-то не могу найти, ну и ладно
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,357
Записей в блоге: 2
Завершенные тесты: 1
22.08.2011, 14:18 #9
Gepar, может сгенерировать такую ситуацию, при которой будет вызвана abort()?
Так на память точно не скажу (сижу не дома, с левого компа, своих книг и справочников под рукой нет), но вроде как abort() будет вызвана если, кроме всего прочего, функция выкинет исключение, которое не входит в ее список возможных исключений (забыл точный термин), т.е. например:
C++
1
2
3
4
void func()throw(int){
//some code//
throw("exception");//заявленно int, а кидаем char*
}
Хотя компилятор в MSVS 2010 такое вообще игнорирует и в данном случае будет вызвана terminate(), но может другие компиляторы поумней, я не проверял)

Добавлено через 55 секунд

Не по теме:

если я правильно тебя понял, ты этого хотел?

0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
12.03.2013, 20:52 #10
Gepar, вы не нашли способ решения этой задачи, а то я тоже столкнулся с этим вопросом...
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
13.03.2013, 02:18  [ТС] #11
yoghurt92, я тогду довольствовался ручным генерированием сигналов через raise, преподавателя это устроило.
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 07:55 #12
Gepar, да я вот тоже этим довольствуюсь... спасибо!)
0
13.03.2013, 07:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 07:55
Привет! Вот еще темы с ответами:

Системник стал издавать короткие сигналы и WINDOWS не загрюжается. - Компьютерное железо
Подскажите :на работе выключил комп ,а когда включил системник стал издавать короткие сигналы и WINDOWS не загрюжается .

сигналы - C++ Linux
Создается два процесса, которые обмениваются сигналами, по прошествии нескольких циклов обмена родительский процесс завершается и дочерний...

Сигналы - C++ Qt
Изучаю сигналы и слоты на КУте. Заголовочник: class MySettings : public QDialog { Q_OBJECT public: explicit...

сигналы - C Linux
К примеру, имеем: процесс 1 создает второй и посылает сигнал второму. Правильно ли у меня написано дерево процессво? Непонятна суть...


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

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

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