mysql:7661
From: "m.yamazaki" <"m.yamazaki" <yamazaki.ms@xxxxxxxxxx>>
Date: Wed, 7 May 2003 10:12:30 +0900
Subject: [mysql 07661] Re: C 言語の API によるクエリの中断について
山崎です。 とみたさん、ご返答ありがとうございます。 > > ・タイマを張って1分後にmysql_closeする > > →mysql_query関数からは戻ってきますが、 > > 投入したSQL文が中断せずデータが挿入されてしまいます。 > > SIGALRM のシグナルハンドラで mysql_close() を呼んだってことでしょうか。 > やっていいのかな…(^^; おっしゃるとおりです。 シグナル受信時にexit()しないと segmentation faultで落ちるのでだめですね。。。 > > ・mysql_thread_idにて接続スレッド取得後、タイマを張って1分後に > > mysql_kill。 > > →mysql_query関数から戻ってこないため、mysql_killが > > LOAD DATA文終了後にしか投入されない。 > > プログラムをマルチスレッド化して、mysql_query() とは別のコネクションを > 張って、そっちで mysql_kill() する方法はどうでしょう? この方法を試してみたらできました。 親プロセスでスレッドIDを取得後、タイマ監視用の子プロセスを スレッドIDを渡して起動し、 子プロセスでタイムアウト時にMySQLに接続して 渡されたスレッドIDをmysql_kill()するという方法にしようと思います。 ありがとうございました。 > そもそも LOAD DATA 文の実行中に、途中で止められるのかどうかという問題 > もあるような気が… (^^; 上記の方法で試したところ、 きちんとkillできているようで、 途中までのデータが挿入されていました。 (それでいいのかという疑問はありますが。。。) 1レコード3カラムのテーブルで十数回試したのですが、 中断しても最終レコードの3カラムには きちんとデータが挿入されていました。 > -- > とみたまさひろ <tommy@xxxxxxxxxx> > 日本MySQLユーザ会 http://www.mysql.gr.jp >
7650 2003-05-06 18:29 ["m.yamazaki" <yamaza] C 言語の API によるクエリの中断について 7658 2003-05-07 08:09 ┗[とみたまさひろ <tomm] -> 7661 2003-05-07 10:12 ┗["m.yamazaki" <yamaza]