検証:STLを使うと実行速度が「遅くなる」?
date
2019/04/01
原本
csvファイルでQGISに地図を表示する
date
2019/04/05
原本
1.動機
2.発想の転換
3.やり方
以上
原因は良く分からないのだけど、C言語用のpostgresのAPIの環境と一緒に使うと、コンパイルエラーが発生する現象に悩まされていた。
#include#include int main(int argc, char **argv) { fprintf(stderr, "start\n"); usleep(1000000); fprintf(stderr, "end\n"); return 0; }
で、これまで見たことがない、以下のエラーが発生するようになってしまった。
error: 'usleep' was not declared in this scope usleep(1000);
原因ははっきりしないのだけど、
g++ -g db20190415.cpp -o db20190415 -I"D:\PostgreSQL\10\include" -L"D:\PostgreSQL\10\lib" -llibpq -lwsock32 -lws2_32
とか、
#include "libpq-fe.h"
が怪しそうである(これらを追加したら、出てきたから)。
==============
暫く悩んだのだけど、usleep()を使わない方法を、試してみた。
#include#include int main(int argc, char **argv) { struct timespec ts; fprintf(stderr, "start\n"); ts.tv_sec = 0; ts.tv_nsec = 999999999/35; // 1/35秒と見なして良い nanosleep(&ts, NULL); fprintf(stderr, "end\n"); return 0; } // 出展 https://www.mm2d.net/main/prog/c/sleep-01.html
これで良しとした。
/* C言語プログラムでPostgreSQLで「あればUPDATE、なければINSERT」をUPSERTを使わずにやってみる。 g++ -g db.cpp -o db -I"D:\PostgreSQL\10\include" -L"D:\PostgreSQL\10\lib" -llibpq -lwsock32 -lws2_32 // 状態をPostgreSQLに書き込み続ける // プログラム実行中にも、経過情報が読めるようにする為 まず、以下の手順でテーブルを作っておく C:\Users\yrl-user>psql -h localhost -U postgres postgres=# \l postgres=# \connect ca_db(データベース名) 以下をコピペしてテーブルとその内容を直接書き込む create table q_state ( number int, action_type int, q int); ca_db=# \dt データベースのテーブルの中身を確認する ca_db=# select * from q_state; // 検索の基本形 ====================== 本プログラムは、 (1)numberとaction_typeの値の両方が同じ行がある場合、qの値を書き換えること (2)同じ行がない場合には、行を追加する を実施する、かなりスマートではない方法である (が、とりあえずは動く) ====================== */ #include#include //#include // sleep(1) #include // sleep(1) #include #include #include #include "libpq-fe.h" const char *conninfo = "host=localhost user=postgres password=xxxxxxx dbname=ca_db port=5433"; PGconn *conn; int open_db() { // データベースとの接続を確立する //PGconn *conn = PQconnectdb(conninfo); conn = PQconnectdb(conninfo); /* バックエンドとの接続確立に成功したかを確認する */ if (PQstatus(conn) != CONNECTION_OK){ fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); } return 0; }; int delete_db() { // テーブルの中身を空にする(全行を消去する) char stringSQL2[512] = {0}; sprintf(stringSQL2, "DELETE FROM q_state;"); PGresult *res = PQexec(conn, stringSQL2); // INSERT等値を返さないコマンドの場合戻り値は PGRES_COMMAND_OK if (res == NULL || PQresultStatus(res) != PGRES_COMMAND_OK) { // SQLコマンドが失敗した場合 fprintf(stderr, "INSERT COMMAND IS FAILED.", PQerrorMessage(conn)); } // 値セットが無い場合でも必ず結果をクリアする PQclear(res); return 0; }; int write_db(int number, int action_type, int q) { char stringSQL2[512] = {0}; char stringSQL1[512] = {0}; sprintf(stringSQL2, "UPDATE q_state SET number = %d, action_type = %d, q = %d where number = %d and action_type = %d;", number, action_type, q, number, action_type); PGresult *res = PQexec(conn, stringSQL2); ExecStatusType est = PQresultStatus(res); char mes[10] = {0}; strcpy(mes,PQcmdStatus(res)); // UPDATEできなかった場合には、"UPDATE 0"というメッセージが帰ってくるので、 // そのメッセージを使って、UPDATEの失敗を判断して、INSERTの処理を行う int c = strcmp(mes, "UPDATE 0"); if (c == 0){ sprintf(stringSQL1, "INSERT INTO q_state(number , action_type , q) VALUES(%d,%d,%d);", number, action_type, q); PGresult *res = PQexec(conn, stringSQL1); } // INSERT等値を返さないコマンドの場合戻り値は PGRES_COMMAND_OK if (res == NULL || PQresultStatus(res) != PGRES_COMMAND_OK) { // SQLコマンドが失敗した場合 fprintf(stderr, "INSERT COMMAND IS FAILED.", PQerrorMessage(conn)); } // 値セットが無い場合でも必ず結果をクリアする PQclear(res); return 0; }; int close_db() { // 最後必ずデータベースとの接続を閉じる PQfinish(conn); return 0; } int main() { open_db(); delete_db(); write_db(1, 2, 4); write_db(1, 2, 3); write_db(2, 1, 4); write_db(2, 2, 4); write_db(2, 1, 5); write_db(1, 2, 5); /* struct timespec ts; fprintf(stderr, "start\n"); ts.tv_sec = 1; ts.tv_nsec = 0; nanosleep(&ts, NULL); fprintf(stderr, "end\n"); */ close_db(); }
keyword WTC 5331 WK panasonic あけたらタイマ
<メール>
"玄関のタイマーの件" 2018/11/24 13:57
https://mail.google.com/mail/u/0/?tab=rm#inbox/CllgCHrfTZlWgjBLgGBtwVTtTnjDqGvGCSlbvHSTpZkchwhMdfFtsfHFDxvfDtVXLNTmwMJdjqB
"Re: 館の玄関の電球" 2018年10月19日(金) 15:49
https://mail.google.com/mail/u/0/?tab=rm#inbox/CqMvqmRFpFpRRnmLQjBrsjJzjGLTLQJLXHDgmXcMKHLlswbJPVKDNPQwbzngZMGTxwtjzHxJmSq