Страниц: [1]
  Печать  
Автор Тема: Ошибка обработки события таймера  (Прочитано 1722 раз)
juvf
Участник
*
Offline Offline

Сообщений: 22


Просмотр профиля
« : Августа 28, 2014, 12:07:30 pm »

Помогите разодраться. Вылетает прога при срабатывании таймера. Не совсем понятно как работает таймер... есть проект... в нём..

при запуске приложения инициализируется прокси
Код:
PtAppAddInput( NULL, 0, proxy_handler, NULL );

Код:
pid_t proxy = qnx_proxy_attach( 0, 0, 0, -1 );//получаем пид на прокси
if( proxy == -1 ) cout << "error proxy !" << "\n";

//создаю таймер

rmtimer( tmid );
time_t time = mktime( &Tm_buf );

struct itimercb event;
event.itcb_event.evt_value = proxy;
event.itcb_count = 0;
tmid = mktimer( TIMEOFDAY, _TNOTIFY_PROXY, &event );
struct itimerspec timer;
timer.it_value.tv_sec     = time;
timer.it_value.tv_nsec    = 0L;
timer.it_interval.tv_sec  = 10000L;
timer.it_interval.tv_nsec = 0;
abstimer( tmid, &timer, NULL );

Есть обработчик, который вызывается при срабатывании таймера. В этом обработчке для экспиримента всё закомитил, и тоге он такой:
Код:
int proxy_handler( void *data, int pid, void *message, unsigned int size )
{
int i, num_items;
/* eliminate 'unreferenced' warnings */
data = data, size = size;

return( Pt_CONTINUE );
}

При срабатывании таймера попадаю в обработчик proxy_handler и выхожу из него. потом вылетает. пробовал дебажить.... после proxy_handler несколько строк в асме и вылет.

Что может быть не так? Где ловушку ставить? Голову сломал ... ((((  Можно ли по каким нибудь тестовым регистрам понять где и из-за чего происходит вылет?
« Последнее редактирование: Августа 28, 2014, 12:16:16 pm от juvf » Записан
Basil-64
Sr. Member
****
Offline Offline

Сообщений: 282



Просмотр профиля
« Ответ #1 : Августа 29, 2014, 11:01:35 am »

rmtimer разве создает таймер, а не удаляет? И вообще, Вы под какую систему пишете? Приложение консольное или под фотон? А то у Вас(сугубо имхо) какой то гибрид ужа с ежом приведен
Записан

В жизни всегда есть место подвигу - главное быть подальше от этого места. Но никак не получается.
juvf
Участник
*
Offline Offline

Сообщений: 22


Просмотр профиля
« Ответ #2 : Августа 29, 2014, 11:24:41 am »

rmtimer - это старый таймер удаляется.
потом mktimer создает.

Цитировать
И вообще, Вы под какую систему пишете?
под Qnx4.25
Цитировать
Приложение консольное или под фотон? А то у Вас(сугубо имхо) какой то гибрид ужа с ежом приведен
один поток  фотоновский, и ещё есть несколько нитей. Если в гуишном приложении несколько потоков - это разве гибрид ужа с ежом?


Проблему решил. К таймеру случайно было привязан ещё один левый обработчик, который всё гадил.

Всем спасибо.
Записан
Страниц: [1]
  Печать  
 
Перейти в: