В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..
styopkin wrote:
> В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..
Как ты определил, что падает на закрытии потока?
Падает с какой диагностикой?
Здравствуйте, 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
Чем запускаешь потоки? Должен быть _beginthread()/_beginthreadex().
"styopkin" <21062@users.rsdn.ru> wrote in message news:1399201@news.rsdn.ru...
From: styopkin
В нескольких потоках (thread) пишу инфу в разные файлы. При закрытии стрима прога падает, причем после различного числа итераций. Может кто сталкивался с чем-нибудь похожим?..
STL: ofstream->close() Оценить
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.
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
Одно из трех.
1) либо не multithreaded библиотека
2) либо как обычно портишь память и многопоточность тут ни причем.
3) либо все таки пишешь из разных потоков в один поток(тафталогия, да, stream <-> thread).
Правильно работающая программа — просто частный случай Undefined Behavior