マルチスレッドプログ ..
[2ch|▼Menu]
33:デフォルトの名無しさん
05/11/12 22:57:52
// TEMPファイルを作成する関数の様なもの。このままスレッドで使うとバグる。
char * create_unique_file(char *file) {
 FILE *fp;
 if(NULL != (fp = fopen(file, "rb"))) {
  // 同名のファイルが既に存在する。
  fclose(fp);
  // ※ここで違うファイル名を生成する処理を行う。
 } else {
  // 同名のファイルが存在しないのでそのままのファイル名でファイルを作成する。
  if(NULL != (fp = fopen(file, "wb"))) {
   // ここにきてほしい。
   fclose(fp); return file;
  } else {
   // なぜかここにくる場合がある。errno:13(EACCES)
  }
 }
 return NULL;
}
// 上の関数をマルチスレッドで使うために若干のセーフティーを加えてみた。
void funk(char *file) {
 EnterCriticalSection(&cs);
 create_unique_file(file);
 Sleep(100);// これをコメントアウトするとバグる(時間が短いとバグりやすい?)。
 LeaveCriticalSection(&cs);
}
// 上側の関数をマルチスレッドプログラム(HTTPDもどき)で使用していたところなぜかバグります。
// ・"wb"が失敗する。及び、プログラム全体のファイル送信がおかしくなる。
// 下側の関数のようにしたところ、
// ・Sleep(50〜)を入れると両方のバグが(見た目)出なくなる。
// fopen()が極短時間で重なっておかしくなっているのではないかと思っています。
// どうなんでしょうか・・・


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5366日前に更新/278 KB
担当:undef