STL: ofstream->close()
От: styopkin  
Дата: 23.09.05 12:45
Оценка:
В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..
Re: STL: ofstream->close()
От: MaximE Великобритания  
Дата: 23.09.05 13:04
Оценка:
styopkin wrote:

> В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..


Как ты определил, что падает на закрытии потока?
Падает с какой диагностикой?

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[2]: STL: ofstream->close()
От: styopkin  
Дата: 23.09.05 13:09
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>styopkin wrote:


>> В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..


ME>Как ты определил, что падает на закрытии потока?

ME>Падает с какой диагностикой?

ME>--

ME>Maxim Yegorushkin

это в стеке:
NTDLL! 7c90eb74()
NTDLL! 7c90eb94()
_close(int 4) line 108 + 74 bytes
fclose(_iobuf * 0x00497938) line 133 + 12 bytes
std::basic_filebuf<char,std::char_traits<char> >::close() line 92 + 50 bytes
std::basic_ofstream<char,std::char_traits<char> >::close() line 316 + 40 bytes
CFileAnalyzer::GenerateReport() line 237
Re: ofstream->close()
От: SkyDance Земля  
Дата: 23.09.05 13:14
Оценка: 1 (1) +1
Чем запускаешь потоки? Должен быть _beginthread()/_beginthreadex().
"styopkin" <21062@users.rsdn.ru> wrote in message news:1399201@news.rsdn.ru...
From: styopkin

В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..
STL: ofstream->close() Оценить
Posted via RSDN NNTP Server 1.9
Re[2]: ofstream->close()
От: styopkin  
Дата: 23.09.05 13:17
Оценка:
Потоки запускаю WINBASEAPI HANDLE WINAPI CreateThread(...).
Re[3]: ofstream->close()
От: sch  
Дата: 23.09.05 13:23
Оценка: 15 (1)
"styopkin" <21062@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1399315@news.rsdn.ru...
> Потоки запускаю WINBASEAPI HANDLE WINAPI CreateThread(...).

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/vccore/html/_core_C_Run.2d.Time_Library_Functions_for_Thread_Control.htm

If you are going to call C run-time routines from a program built with LIBCMT.LIB, you must start your threads with the _beginthread function. Do not use the Win32 functions ExitThread and CreateThread. Using SuspendThread can lead to a deadlock when more than one thread is blocked waiting for the suspended thread to complete its access to a C run-time data structure.
Posted via RSDN NNTP Server 1.9
Re[3]: STL: ofstream->close()
От: MaximE Великобритания  
Дата: 23.09.05 13:28
Оценка:
styopkin wrote:

> Здравствуйте, MaximE, Вы писали:

>
> ME>styopkin wrote:
>
>>> В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..
>
> ME>Как ты определил, что падает на закрытии потока?
> ME>Падает с какой диагностикой?

> это в стеке:

> NTDLL! 7c90eb74()
> NTDLL! 7c90eb94()
> _close(int 4) line 108 + 74 bytes
> fclose(_iobuf * 0x00497938) line 133 + 12 bytes
> std::basic_filebuf<char,std::char_traits<char> >::close() line 92 + 50 bytes
> std::basic_ofstream<char,std::char_traits<char> >::close() line 316 + 40 bytes
> CFileAnalyzer::GenerateReport() line 237

Какая ошибка?

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[3]: ofstream->close()
От: SkyDance Земля  
Дата: 23.09.05 14:34
Оценка:
"styopkin" <21062@users.rsdn.ru> wrote in message news:1399315@news.rsdn.ru...
> Потоки запускаю WINBASEAPI HANDLE WINAPI CreateThread(...).

Ну потому и падает — CRT не был инициализирован/деинициализирован корректно.
Posted via RSDN NNTP Server 1.9
Re: STL: ofstream->close()
От: _Winnie Россия C++.freerun
Дата: 23.09.05 17:54
Оценка:
Здравствуйте, styopkin, Вы писали:

Одно из трех.
1) либо не multithreaded библиотека
2) либо как обычно портишь память и многопоточность тут ни причем.
3) либо все таки пишешь из разных потоков в один поток(тафталогия, да, stream <-> thread).
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.