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

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

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

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

21.08.2011, 17:08. Просмотров 4257. Ответов 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 и быдлокод
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2011, 17:08     Сигналы в windows
Посмотрите здесь:

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

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

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

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

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

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

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

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

Добавлено через 48 секунд
В общем я не о тех сигналах что пищат, я о сигналах от os для программы
Gera777
4 / 4 / 1
Регистрация: 09.07.2010
Сообщений: 12
21.08.2011, 19:16     Сигналы в windows #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/c...signal/signal/
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
21.08.2011, 19:37  [ТС]     Сигналы в windows #5
Gera777, ну SIGTERM я и сам могу вызвать / "выбросить", а что с остальными? Я хочу чтобы именно от системы поступил сигнал и программа прореагировала на это (как это идёт с ctrl+c во время выполнения программы и запуском обработчика SIGINT), ведь для этого же сигналы и сделаны как я понял. Просто писать в коде программы
C++
1
raise(SIGABRT);
глупо же как-то.

Добавлено через 2 минуты
+ мне нравиться вставка
C++
1
/* code here */
мне что-то подсказывает что здесь чего-то не хватает.
Gera777
4 / 4 / 1
Регистрация: 09.07.2010
Сообщений: 12
21.08.2011, 20:00     Сигналы в windows #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 - указатель на функцию-обработчик.
grizlik78
Эксперт С++
1904 / 1436 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
21.08.2011, 20:04     Сигналы в windows #7
Gera777, вопрос не в том, как обработать сигналы, а как направить сигнал программе извне. Я вот не уверен, что в Windows есть такая богатая поддержка сигналов, какая описана в POSIX. Хотя я мало знаю, например, про Win7.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
22.08.2011, 14:06  [ТС]     Сигналы в windows #8
Gera777, вот grizlik78 меня понял правильно Просто генерировать самому вручную разные сигналы не интересно же, так от них вся практическая польза теряется. У меня помимо 7ки то и XP есть, но как в windows их генерировать вообще что-то не могу найти, ну и ладно
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,225
Записей в блоге: 1
Завершенные тесты: 1
22.08.2011, 14:18     Сигналы в windows #9
Gepar, может сгенерировать такую ситуацию, при которой будет вызвана abort()?
Так на память точно не скажу (сижу не дома, с левого компа, своих книг и справочников под рукой нет), но вроде как abort() будет вызвана если, кроме всего прочего, функция выкинет исключение, которое не входит в ее список возможных исключений (забыл точный термин), т.е. например:
C++
1
2
3
4
void func()throw(int){
//some code//
throw("exception");//заявленно int, а кидаем char*
}
Хотя компилятор в MSVS 2010 такое вообще игнорирует и в данном случае будет вызвана terminate(), но может другие компиляторы поумней, я не проверял)

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

Не по теме:

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

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

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

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

Сигналы - C++ Qt
Зздравствуйте , ребята , объясните nожалуйста зачем в сигналах ставят nараметры? Я не совсем nонимаю, и еще отличается ли чем то слот от...

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

Сигналы - Цифровая обработка сигналов
Здравствуйте. Помогите с ответом на несколько вопросов: 1. Что такое эффективная полоса частот сигнала? 2. Для чего нужно знать...


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

Или воспользуйтесь поиском по форуму:
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 07:55     Сигналы в windows #12
Gepar, да я вот тоже этим довольствуюсь... спасибо!)
Yandex
Объявления
13.03.2013, 07:55     Сигналы в windows
Ответ Создать тему
Опции темы

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