2016-06-28 7 views
1

キーを入力するタイマーとライトをオフにするタイマーを設定したいが、最初に設定したタイマーを使用しているため、複数のタイマーを設定することはできません。うまくいかなかった。verifone vx520で複数のタイマーを設定する方法

私はあなたが別のイベントとしてそれらをキャプチャしたい場合は、別のイベントマスク(EVT_TIMER)を使用する必要があり

int timer1, timer2; 
long events; 
timer1 = set_timer(8000, EVT_TIMER); 
timer2 = set_timer(5000, EVT_TIMER); 
while(1){ 
events = wait_event(); 
if(events & EVT_KBD){ 
clr_timer(timer1); 
break; 
} 
else if (events & EVT_TIMER) 
{ 
printf("TIME_OUT"); 
break; 
} 

while(1){ 
events = wait_event(); 
if(events & EVT_KBD){ 
clr_timer(timer2); 
break; 
} 
else if (events & EVT_TIMER) 
{ 
printf("TIME_OUT2"); 
break; 
} 
} 

答えて

1

以下のコードを使用します。トリッキーなことは、他のアクションを引き起こす可能性があるため、あなたが使用することについて注意する必要があるということです。これらのイベントはsvc.hで定義されています(マスクはlongで、longは32ビットと定義されているため、すべての標準イベントが使用された後は実際には何も残っていません)。

良いニュースはset_timer(つまりtimer1timer2はあなたのコード内にあるものだ)IDを返すということです。 SVC_TICKS APIを使用して、期限切れのタイマーを特定できます。私はそれを手伝うために "timeRemains"というラッパーを書いた。

//First, define "timeRemains" 
char timeRemains(long* timer) 
{ 
    return SVC_TICKS(0, timer); 
} 

//Here's what your code may look like: 
if(!timeRemains(&timer1)) 
{ 
    //timer1 has expired. Do whatever you wanted to do when that happens. 
    //NOTE: you don't know the state of timer2--it may also have expired, 
    //  so you will need to deal with that 
} 

if(!timeRemains(&timer2)) 
{ 
    //timer2 has expired. Do whatever you wanted to do when that happens. 
    //NOTE: even though we are PRETTY sure that timer1 has not yet expired, 
    // you can't just forget about it. If you are going to exit this polling loop, 
    // be sure to clear it first. 
} 
0

別のアプローチは、最初のタイマーが期限切れになるようにするために(たとえばタイマ満了時間順にソートリスト)とは、すなわち最初の(唯一のシステムタイマーを使用するには、独自のデータ構造であなたのタイマーを維持することですソートされたリスト)。

システムイベントEVT_TIMERを受け取ると、有効期限が過去のタイマー(ソートされたリストから削除する)をすべて実行します。

リストにタイマーが残っている場合は、新しい最初のタイマーの有効期限が切れる新しいシステムタイマーを開始します。

は2つのことが知っておくために(少なくとも)があります

  • それが期限切れに最初のタイマーになっていないかどうかをチェックしなければならない新しいタイマーを追加します。その場合は、既存のシステムタイマーをclr_timer()で取り消し、新しい最初のタイマーが期限切れになるように新しいシステムタイマーを設定する必要があります(新しく追加されたタイマーはソート済みリストの最初になります)。空のリストに新しいタイマーを追加するときは、タイマーの有効期限(または何か他のもののために)を計算するためにread_ticks()コールを使用している場合を確認してください

  • (今アクティブなしシステムタイマーがあってはならないよう)clr_timer()呼び出しをスキップ値が0にオーバーフローしたときのケースを処理する(49.7日ごとに発生)

関連する問題