マルチスレッドプログ ..
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