2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2019-04-15 usleep()がコンパイルエラーになる件 [長年日記]

原因は良く分からないのだけど、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

これで良しとした。