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

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

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

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

21.08.2011, 17:08. Просмотров 4001. Ответов 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++
C++ Программировани Shell для Windows (замена Windows Explorer)
C++ сигналы SIGINT SIGABORT
Что выбирать для дальнейшего изучения Windows 7 c Win32 или Windows 8 c WinRt? C++
Звуковые сигналы с++. Получение 8-битных звуков C++
C++ Виртуальный класс. Сигналы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2011, 17:17     Сигналы в windows #2
Цитата Сообщение от Gepar Посмотреть сообщение
Как генерировать сигналы в среде windows?
Есть такая функция
C++
1
MessageBeep()
, нужен winuser.h
Вот как вариант звука окончания чего-либо
C++
1
MessageBeep(MB_ICONEXCLAMATION);
)
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
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
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
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
Эксперт С++
 Аватар для grizlik78
1892 / 1424 / 105
Регистрация: 29.05.2011
Сообщений: 2,980
21.08.2011, 20:04     Сигналы в windows #7
Gera777, вопрос не в том, как обработать сигналы, а как направить сигнал программе извне. Я вот не уверен, что в Windows есть такая богатая поддержка сигналов, какая описана в POSIX. Хотя я мало знаю, например, про Win7.
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
22.08.2011, 14:06  [ТС]     Сигналы в windows #8
Gera777, вот grizlik78 меня понял правильно Просто генерировать самому вручную разные сигналы не интересно же, так от них вся практическая польза теряется. У меня помимо 7ки то и XP есть, но как в windows их генерировать вообще что-то не могу найти, ну и ладно
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 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
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
12.03.2013, 20:52     Сигналы в windows #10
Gepar, вы не нашли способ решения этой задачи, а то я тоже столкнулся с этим вопросом...
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
13.03.2013, 02:18  [ТС]     Сигналы в windows #11
yoghurt92, я тогду довольствовался ручным генерированием сигналов через raise, преподавателя это устроило.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 07:55     Сигналы в windows #12
Gepar, да я вот тоже этим довольствуюсь... спасибо!)
Yandex
Объявления
13.03.2013, 07:55     Сигналы в windows
Ответ Создать тему
Опции темы

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