キャンセルとは?

ご注文頂きました航空券をキャンセルされる場合は、必ずエアーズゲートまでご連絡をお願い致します。ご連絡はお電話(03-3454-6120)、もしくは「キャンセルフォーム」から受け付けております。
キャンセル料金につきましては、航空券の種別と搭乗日までの日数により異なります。詳細は下記をご確認下さいませ。
国内航空券は請求書に記載された金額をご入金を頂いた時点で発券され、発券以後のお取り消しにはキャンセル料金が発生致します 。
1. ご出発前のキャンセルにつきましては、航空券の種類に応じ、2,000円・4,000円・額面の50%のキャンセル料金が発生します。
※28日以上前のご予約の一部の航空券につきまして、50%のキャンセル料金が発生する場合もございますので、予めご了承下さい。
※航空券が既にお手元にある場合で、ご搭乗日から5日以内にキャンセルされた航空券をエアーズゲートにお戻し頂かない場合、払い戻しができない場合がございますので、予めご了承下さい。
5. ご出発日当日の出発時間以前のキャンセルにつきましては、50%がキャンセル料金として発生します。
※JALの宿泊付き往復パックに関しましては、毎日15:00までがキャンセル受付時間となります。以降は翌日のお取扱いとなりますので、あらかじめご了承下さい。
※ご搭乗日から5日以内に、キャンセルされた航空券をエアーズゲートにお戻し頂かない場合、払い戻しができない場合がございますので、あらかじめご注意下さい。
キャンセルのご連絡に関しましては、弊社営業時間内にお願い致します。営業時間外でのご連絡は、翌営業日のお取り扱いとなります。
お支払い済みの代金払い戻しはお客様よりキャンセルのご連絡を頂きましてから、お取消手続きを開始致します。払い戻し金額(規定のキャンセル料金を差し引いた金額)を、お客様ご指定の銀行口座へご返金致します。お振り込み手続き完了までは1週間前後かかりますので予めご了承下さい。
すでに航空券が発券され、お客様のお手元にございます場合、ご出発日から5日経過するまでにエアーズゲートへ到着するよう、ご返送をお願い致します。航空券が金券的価値を持つためですのでご理解下さい。航空券の到着後よりお手続きを開始致します。
航空券のみの販売の場合、ご成約時にご案内する航空券の種類により、航空便の変更可否が決定致します。詳細はご請求書をご確認下さい。
宿泊券付きの往復パックに関しましては、お手配後の航空便の変更はできません。おとり直しをなさる場合でございましても、規定のキャンセル料金が発生致しますので予めご了承下さい。
原則として規定のキャンセル料金が発生致します。また、ホテルのお部屋割りが変更となり、ホテル側の空室状況により、ツインルームのシングル利用などの追加料金が発生する場合がございます。
お乗り遅れの場合のご返金は、航空会社の規定に準じます。出来る限り、ご出発時間前にキャンセルのご連絡をお願い致します。
原則として払い戻しは不可能となっております。ただし、往路便に乗り遅れた場合であっても、ご宿泊とお帰りの航空券はご利用頂けます。
※ただし、公共の交通機関の遅延による場合は、該当交通機関の遅延証明書をお持ち頂きますと、航空会社の判断で振替便がご用意される場合がございます。
悪天候による欠航や大幅な遅延により、該当便及び振替便をご利用なさらない場合は、原則として全額の払い戻しとなります。空港のカウンターで発行される欠航証明書と航空券を同封のうえ、エアーズゲートまでご返送をお願い致します。
※ただし、往復パックの復路便が対象の場合は、ご旅行金額の20%〜30%のお払い戻しとなります。往路航空券代金とご宿泊代金が引かれるためでございますので、予めご了承下さい。

[ 38] キャンセルに関しまして | 国内航空券予約 | 出張、旅行に最適。
[引用サイト]  http://www.air-j.com/menu/cancel.php?Frame=1

pthread には、他のスレッド (あるいは自分自身でもよい --- 普通は pthread_exit しますが) の実行を終了するための手段としてキャンセルが用意されています。 キャンセルは pthread_cancel() 関数を呼び出すことによって 要求することができます。 この関数を呼び出すと、引数で指定されたスレッドに対してキャンセルを要求します。 pthread_cancel() 関数自体は次のようなシンプルな関数なので、 取り消したいスレッドの ID さえ分かれば苦もなく呼び出せます。
なお、pthread_cancel() 関数は、対象スレッドに対してキャンセルの要求を出すと、 そのスレッドが終了したかどうかとは無関係に、すぐに戻ってきます。 もし、そのスレッドが確実に終了するまで待ちたければ、 明示的に pthread_join() 関数を呼び出す必要があります。
ここで一つ憶えておくべきことは、 「キャンセルは基本的に協調的に行われる」ということです。 「基本的に」というのは、この振る舞いを変えることもできるからなのですが、 以下しばらくはデフォルトの状態であると仮定します。 「協調的」というのはどういうことかというと、 「あるスレッドに対してキャンセルの要求が行われても、 そのスレッドがキャンセルを受け入れる明示的な処理部分に到達するまでは キャンセルが行われない」 ということで、もっと簡単に言いかえれば 「キャンセル要求されたスレッドがすぐに(あるいは永久に)終了するとは限らない」 ということを意味します。 たとえば次のようなコードを実行しているスレッドがあったとします:
このスレッドに対して別のスレッドから pthread_cancel() を実行したとしても、 デフォルトではこのスレッドがキャンセルされることはありません (したらそれは pthread 実装のバグです)。 よって、プログラマは意識的にこの協調性の制御を行う必要があります。
一般的に、あるスレッドに対してキャンセルが要求された場合、 (デフォルトでは)そのキャンセルはすぐに実行されず、 実際にスレッドがキャンセルされるのは 「キャンセルポイント」というものに指定されたライブラリ関数が 呼び出された(あるいは呼び出されている)タイミングに限られます。
キャンセルポイントとなる関数がブロックするたぐいの関数の場合、 ブロック中にキャンセル要求が行われるとその待ち状態を解除して キャンセルを実行します。
なお、待ち状態の解消と同時にキャンセル要求が行われた場合の 動作については規定していません。つまりこの場合、
のどちらかが行われます。この場合の副作用についての規定もありませんが、 少なくとも(協調的な)キャンセルが安全に行えることは 保証されていると期待できます。
ところで、キャンセルポイントのリストを見てみるとわかりますが、 その量が多いため暗記するのはちょっと難しそうです。 一方で、プログラムを組むときにいちいちこのリストを参照するのも面倒です。 したがって、極力このリストに依存せずに済むよういくつかのポイントを 押さえておくことが重要でしょう。
これはそれほど多くはないのですが、 個々の関数を憶えていると大変なので、次のように憶えると良いでしょう:
特に最後の pthread_testcancel() 関数は キャンセルポイントとなるためだけに存在する関数です。
どの関数がキャンセルポイントかを把握するのが困難である以上、 できるだけ暗黙の仮定に左右されないようにプログラムを書くのがよいでしょう。 他のスレッドからキャンセルされる可能性のあるスレッドに対して プログラマが期待する振る舞いとしては、 大きく分けて次のようなケースが考えられます:
まず、「絶対にキャンセルされては困るケース」では、 後述する方法でキャンセルを禁止してしまうという方法がよいでしょう。 キャンセルが禁止されたスレッドは、いかなるキャンセルポイントでも (pthread_testcancel() 関数ですらも)キャンセルされることはありません。 これは簡単ですね。
「ちゃんとキャンセルされることを保証したいケース」でも、 前述したようなビジーループでキャンセルが行われることを 保証したい場合には簡単で、pthread_testcancel() を適当な間隔で呼べばよい だけです:
一方で、唯一難しいのが、 「何らかの待ち状態(ブロッキング)の最中にキャンセルが行われることを 保証したい場合」です。 これは、どうやっても「ブロックする関数がキャンセルポイントかどうか」 という属性への依存から逃れられないため難しいのです。 少なくとも前述したリストを参照する必要がありますね。
このようなケースの非常にありがちなものは、I/O 操作を行う関数です。 このうち、システムコールである read() や write() などは 確実にキャンセルポイントであることが保証されていますが、 標準 I/O 関数である getc() や putc() などは必ずしもキャンセルできるとは 限りません(pthread 実装に依存します)。 よって、getc() や putc() 相当の機能が必要だけれども、 同時にスレッドのキャンセルも行わなければならないような場合、 次のような難しい選択を迫られます:
前者は移植性が高い方法ですが、read() や write() で同様のことを 実現せねばならず、少し面倒です。 後者は(もしそれらが目的通りキャンセルポイントであれば)プログラムは 楽になりますが、移植性は損なわれるでしょう --- もっとも、getc() や putc() あたりは多くのシステムでキャンセル可能なのでは ないかとは思いますが --- この辺はバランスだと思ってください。 ただ、この問題にかかわるバグはやっかいなことになる可能性が高いため、 後者の方法を自分のアプリケーションで使いたいのならば、 「キャンセルポイントとして期待される関数の範囲をあらかじめ決めておき、 それをドキュメント化する」 などの方法でリスクを減らしておくと良いかもしれません。
あるいは第 3 の方法として、 「ファイルポインタに割りつけられたデスクリプタをノンブロッキングに設定し、 読み書きが可能になるのを待つためには select システムコールや poll システムコールを利用する」という方法も考えられますが、 これはスレッドを利用する目的からすると少々スマートとは言えません。
mutex 利用の原則として、 各スレッドの並列性を高めるために「mutex をロックする時間は極力短くする」 というのがありますが、これはキャンセルとの兼ね合いという点でも重要です。 つまり、ロックされている mutex をスレッドが待っている間は、 ずっとそのスレッドに対するキャンセルが実施されませんから、 キャンセルへの応答性を高めるという観点でもロック時間の短縮というのは 重要なポイントなのです。
また、mutex をロックしている区間内にキャンセルポイントが存在する場合、 そこでキャンセルが発生すると当然その mutex はロックされたままになります。 このような mutex は後述するクリーンアップハンドラで明示的にロックを 開放してやる必要があります。そのため、mutex でロックしている間は極力、 キャンセルポイントとなる関数を呼び出さないか、あるいはキャンセルを 禁止してしまうのが良いでしょう。
以上のようなを考慮すると、「mutex ロックはデータ構造の整合性を保つための、 (粒度の細かい)クリティカルセクションとしてのみ利用すべき」 であると言えるでしょう。mutex は二値セマフォの変種ではあるものの、 (えてして長時間のロックが必要になりがちな)資源のロックなどの目的のためには 向いていません。このような目的のためには POSIX リアルタイム拡張のセマフォか、 それが利用できない場合には条件変数でセマフォをエミュレートするのが よいでしょう。
mutex とは異なり、条件変数の通知待ち関数 (pthread_cond_wait() 関数と pthread_cond_timedwait() 関数) は常にキャンセル可能です。 一つ注意するべきことは、これらの待ち状態が解除されるときは常に、 この条件変数と関連づけされている mutex がロックされるということで、 これはキャンセルによって待ち状態が解除されたときも例外ではありません。 したがって、これらの関数を実行中にキャンセルが行われた場合、 その mutex は必ずロックされた状態でキャンセル処理に突入します。 よって、スレッドのキャンセル処理でこの mutex のロックを 外す必要があるでしょう。この目的のためには、 後述するクリーンアップハンドラを利用することができます。
また、当然のことながら、この mutex が他のスレッドによって ロックされていると、そのロックが解除されるまでキャンセルは遅延されます。 したがって、条件変数と関連づけされている mutex についても、 ロック時間を極力短くするというのは重要なことです。
バリアは、複数のスレッドがあるポイントで勢揃いするのを待つための仕組みですが、 その待ち関数(pthread_barrier_wait() 関数)はキャンセルポイントではありません。 したがって、キャンセルが発生する場面でバリアを利用するときは、 mutex と同様になるべく待ちが短期間になるよう注意すべきです (実際には、これはキャンセルが発生しない場面でも心がけるべきですが)。
バリアは通常、スレッドの開始待ちのようなところでのみ使われるべきものなので、 あまりキャンセルが問題になることはないでしょう。しかしながら、 バリアの待ちが発生している間はキャンセル要求が飛ばないように注意するか、 あるいはキャンセルを禁止する必要があるでしょう。
スピンは、(その実装方法が規定されているという点を除いて) mutex そのものなので(そしてそのロック待ち関数である pthread_spin_lock() 関数もキャンセルポイントではないため)、 mutex と全く同じ扱いをすればよいでしょう。
あるスレッドに対するキャンセルを許可するかどうかは pthread_setcancelstate() 関数によって設定することができます:
この関数を呼び出すと、そのスレッドは newstate によって指示されている許可状態に設定され、 oldstate が指す変数にそれまで設定されていた許可状態が格納されます (規格では oldstate に NULL を渡すことは許されていません --- 明示的に「駄目だ」とも書いてませんが)。
一方で、キャンセルを協調的に行うかどうかは pthread_setcanceltype() 関数によって設定することができます:
この関数を呼び出すと、そのスレッドは newtype によって指示されている協調方式に設定され、 oldtype が指す変数にそれまで設定されていた協調方式が格納されます (先ほどと同様に oldtype に NULL を渡すことは許されていません)。
キャンセルの協調状態が非同期に設定されている場合に キャンセルの要求があると、キャンセルポイントであろうがなかろうが、 ほぼすぐにそのスレッドのキャンセルが実行されます。 ただし、非同期のキャンセルを安全に行うためには、 そのスレッドが次の条件を満たしている必要があります:
非同期のキャンセルが発生する可能性のある間、いくつかの例外を除く、 いかなる標準関数/システムコール関数をも呼び出してはならない。
この条件を無視した場合、非常にやっかいなバグに巻き込まれる可能性があります。 現実的には、この条件を満たすことができるケースはそれほど多くないため、 基本的に非同期キャンセルは使わないほうが良いでしょう。
キャンセル禁止中に行われたキャンセル要求の扱いについては、 規格では「ペンディングされる」という表現がされています。 これは禁止中に行われたキャンセル要求はそのまま保持され、 再びキャンセルが許可されてキャンセルポイントに 到達した時に(あるいは非同期の場合には許可された直後に) キャンセルが実行されることを意味します。
あるスレッドに対するキャンセル要求が受理されてキャンセル処理に入ると、 設定されているすべてのクリーンアップハンドラが呼ばれます。 クリーンアップハンドラの設定と解除は、 pthread_cleanup_push() および pthread_cleanup_pop() 関数によって行います:
ここで、hanlder はクリーンアップハンドラ関数へのポインタであり、 handler が呼び出されるときには closure が引数として渡されます。 また、isexec が 0 でなければ、クリーンアップハンドラの解除時に そのハンドラが呼ばれます。0 ならば呼ばれません。
キャンセル要求によってクリーンアップハンドラが呼ばれるときには、 当然そのクリーンアップハンドラはハンドラを設定したスレッドの コンテキストで呼び出されます。呼び出されている間は、 そのスレッドに対する別のキャンセル要求が禁止されます。pthread_cleanup_pop() によってクリーンアップハンドラが呼ばれた場合のキャンセル許可不許可については、 規格は何も規定していませんので、 必要ならば事前に不許可にしておくとよいでしょう。
また、クリーンアップハンドラは pthread_exit() によってスレッドが 終了される場合にも呼び出されます。 このときのキャンセル許可不許可についても pthread_cleanup_pop() と同様です。
関数名からわかるとおり、これらは入れ子にして複数設定することができます。 その場合、クリーンアップハンドラは設定されたのと逆順に呼び出されます。
なお、「関数」と呼んでいますが、 実際にはこれらはマクロで実装されることが多く、 たとえば NetBSD では次のように実装されています:
このような実装を許すため、 規格では利用者に対し「ある pthread_cleanup_push() に対して かならず唯一に対応する pthread_clean_pop() が存在し、 それは同じ構文ブロックに属さなければならない」 と規定しています。つまり、次のような例は、 最後のものを除いて正しくありません:
また、ある pthread_cleanup_push() に対応する pthread_cleanup_pop() を 飛び越えるような goto 文や longjmp() 関数などの利用も禁止されています。 同様に、クリーンアップハンドラからの longjmp() などによる大域脱出も 禁止されています。つまり、一度キャンセル処理に入った場合、 そのスレッドの終了を取りやめることはできないということです。
キャンセルが要求されたスレッドに対しては、 そのスレッドがデタッチされていなければ pthread_join() 関数によってその終了を待つことができます。 キャンセルによって終了したスレッドの「戻り値」は PTHREAD_CANCELED というマクロで定義された 特別な void ポインタ値となります。 pthread_join() の呼び出し元は、 これによってそのスレッドがキャンセルによって終了したのか、 それとも pthread_exit() 関数によって終了したのかを判定することができます。

[ 39] pthread のキャンセル
[引用サイト]  http://www.imou.to/~AoiMoe/column/pthread/pthread_cancel.html

デスクトップのメモ帳を新規に開いて、メモを書き、ウィンドウを閉じようとすると、「変更を保存しますか?」というメッセージダイアログが表示されます。ユーザーにしてみれば、「新しいメモをいま書いたところなのに、なぜ『変更』なんだ?」と思うでしょう(本文から)
連載最終回の第4回目は、ユーザーインターフェイス(UI)に現れるさまざまな情報表現を、異なる慣習的、文化的、論理思考的背景を考慮しながら最適化していくための Tipsを紹介していきます。
英語や、日本語の横書きでは、情報は大きく上から下に、左から右に展開していきます。ユーザーは画面(ウィンドウ内)の左上から右下に向かって意識を推移させて、そこで表現されている情報を取得していきます。
実際にはユーザーは、まず画面中央付近に視線をやり、そして全体をざっと見渡してから、重要と思われる個所に注目していくようです。ひとたび内容を読もうとか、入力フィールドを埋めていこうと決めたら、当然、上から下に、左から右に向かって意識を集中させたり、入力作業を進めていくことになります。
そのため、「『戻る』で入力データが消えてしまうフォームはいらない」でも書いたとおり、フォーム要素や各種コントロールは、その意識の流れに合わせて配置しなければなりません。また、次のページに進むための「次へ→」といったナビゲーションは画面の右下に配置するのが自然です(「←前へ」は、それと対になるように、左下に配置するのがよいでしょう)。
多くのフォーム画面や、ダイアログボックスでは、そこで行った入力作業を確定させて次の作業に進むためのアクションとして、画面の最下部(もしくは一連のフォームコントロールの下)に、「OK」と「キャンセル」といったボタンを配置しています。
作業を前に進めるための肯定ボタンには、「OK」や「はい」といった汎用的なラベルよりも、「送信する」や「購入を確定する」といった具体的なラベルを用いた方がよいという話は第3回「虫眼鏡のアイコンは『検索』か『拡大』か?」でご説明しました。ここでは、その並び順について考察します。
肯定ボタンはデフォルトボタンとも呼ばれ、(ユーザーが操作ミスをしてその画面にたどり着いたのでない限り)それがユーザーの求めるアクションであると同時に、システムが推奨するアクションであることを意味します。
デフォルトボタンはEnterキーでも代用できるようになっているのが普通です(ただし深刻なデータロスにつながるような場面では押し間違いを防ぐために、あえてEnterキーで代用できないようにすることもあります)。
では、デフォルトボタンとキャンセルボタンを横に並べて配置する場合、どちらを左に、どちらを右にするべきでしょうか? 代表的なプラットフォームとして、Mac OSとWindowsの標準的なダイアログデザインから考えてみましょう。
Macではデフォルトボタンを右に、Windowsではデフォルトボタンを左に配置しています。両方のOSを使うことがある方なら、この違いが思わぬ操作ミスにつながることがあるのを知っているでしょう。デフォルトボタンの位置は習慣として身に付いてしまうため、順序が逆転してしまうと、OKを押そうとしてついキャンセルを押してしまう(あるいはその逆)といったミスが多く発生するのです。
デフォルトボタンは左右のどちらがよいのか、という問題の答えは、おそらく「右の方がよい」でしょう。理由は、その方が情報の流れに合っているからです。ユーザーは左上から右下に向かって情報を取得していきます。
そのため、デフォルトボタンが右側(つまり画面全体における右下)にあると、それは現在の画面における最後の情報であり、すなわち次の画面を呼び出すスイッチであることを示唆するからです。
これは、「次へ→」といったナビゲーションを画面の右下に配置すべきであるのと同じです。「次へ→」というボタンが画面の左側にあったらとても不自然です。2次元上の情報を追うとき、私たちの意識は上から下に、左から右に向いているのです。
また、デフォルトボタンが右側にあると、ユーザーは画面上で最後にその選択肢を目にすることになります。つまり画面上のあらゆる情報や選択肢(キャンセルも含む)をすべて見たうえで、次に進むかどうかを判断できるのです。
もちろん、デフォルトボタンが右下になくても、ユーザーは画面全体を見渡してから次に進むかどうかを判断することができます。しかし、そのためには、一度デフォルトボタンを通り過ぎて最後の選択肢まで見た後、デフォルトボタンに戻ってこなければなりません。
デフォルトボタンが常に右下にあるのであれば、ユーザーは途中を無視していきなりデフォルトボタンに働き掛けることも可能になります。デフォルトボタンを押すべきであるとあらかじめ知っているような場合にこれは合理的です。
ではなぜWindowsではデフォルトボタンをキャンセルボタンより左側に置くのでしょうか。はっきりとした理由は分かりませんが(単にMacと違うルールにしたかったのかもしれませんが)、おそらく、次のような考え方なのではないかと思われます。
情報は左から右に向かって流れます。1 → 2 → 3 というように。そのとき、最も重要なのは「1」です。重要だから最初に目に触れるようにするのです。これは情報の論理構成上、妥当な考え方です。
デフォルトボタンとキャンセルボタンという2つの選択肢がある場合、重要なのは当然デフォルトボタンの方であり、キャンセルボタンはおまけです。ですから、デフォルトボタンを先に置き、キャンセルボタンを後に置いているのではないでしょうか。
しかしこの考え方は、2次元上にオブジェクトをレイアウトしてランダムアクセスできるようにするという GUI のコンセプトにあまり合致しておらず、多分に手続き的な論理展開です。先述のとおり、ユーザーは画面全体の中で、各コントロールの相対的な位置関係や大きさの対比から、それぞれの意味を把握しようとします。デフォルトボタンが左側にあると、全体の中で埋もれてしまい、目立たなくなってしまいます。
さらに、そもそもダイアログにおいて重要なのは、デフォルトボタンではなく、むしろキャンセルボタンであるといえます。なぜなら、画面下部にあるデフォルトボタンとキャンセルボタンは、ユーザーに対して「先に進む」か「前に戻る」かの意思決定を促す役割を担っていますが、すべてのユーザーが「先に進む」ことが分かっているのなら、キャンセルボタンは必要ないからです。
つまり、もしキャンセルボタンがあるのであれば、「あなたはここでキャンセルすることができますよ」ということをデフォルトボタンの存在よりも先にユーザーに示す必要があるのです。
従来のデスクトップアプリケーションでのGUIやインタラクションの原則から、Webアプリケーションのデザインを考えよう
ゲームから読み解く、俺スクリプト時代の知的な挑戦 (2007/11/28)「初音ミク」画像を検索できたLive SearchやマッシュアップツールPopFly、デスクトップアプリPrism、SNS用ウィジェットOpenSocialなど全8トピック
“リッチクライアント”に至るまでの軌跡と現在(いま) (2007/11/26)今回はフォーラム名にもある“リッチクライアント”の成り立ちとAjax、Flashなど現在活躍している主な技術を一覧で紹介します
バリデータとフォーマッタで“使える”Flexアプリを作ろう (2007/11/21)現場で“使える”Flexアプリケーションを作るために、データの検証を行えるバリデータと文字列表現を指定するフォーマッタを解説します
Silverlight開発を始めるための基礎知識 (2007/11/19)学習に必要な基礎知識として、開発・実行・配布など実際にSilverlightを活用するための一連の方法について解説
エンジニアとしての力量を数値で測った経験は?ITSSレベルを無料で判定、12月25日(火)まで
ホワイトペーパー利用者に「Amazonギフト券」を抽選で100名様にプレゼント!――TechTargetジャパン リニューアル・キャンペーン
@ITトップ|リッチクライアント & 帳票フォーラム トップ|会議室|利用規約|プライバシーポリシー|サイトマップ

[ 40] 「OK」と「キャンセル」、どちらが有効か − @IT
[引用サイト]  http://www.atmarkit.co.jp/fwcr/rensai/usabilitytips04/01.html



お気に入り



  • track feed
    • seo