> везде подразумевается использование MFC > вопрос номер раз: > подскажите плиз функции для работы c потоками...так чтобы > их можно было принудительно завершать из других потоков. > насколько я понял с AfxBeginThread такое не получится.
Получится, хотя по отношению к ресурсам это не есть хорошо.
> и второй вопрос: > как из MFC-проекта вызывать API-функции.. > ту же CreateThread(где 6 параметров) вызвать не > удалось...хотя я и подключил все необходимые заголовки и > библиотеки. вместо нее зато есть какаято с 2-мя или 3-мя > параметрами, с которой непоятно что делать (в MSDN ничего > толком не написано)...вот она кстати: > BOOL CreateThread( DWORD dwCreateFlags = 0, UINT nStackSize > = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); > заранее спасибо
Если вызывать как ::CreateThread, вызовется. Только использовать в этом потоке функции из MFC и стандартной библиотеки при этом надо будет крайне осторожно.
везде подразумевается использование MFC
вопрос номер раз:
подскажите плиз функции для работы c потоками...так чтобы их можно было принудительно завершать из других потоков.
насколько я понял с AfxBeginThread такое не получится.
и второй вопрос:
как из MFC-проекта вызывать API-функции..
ту же CreateThread(где 6 параметров) вызвать не удалось...хотя я и подключил все необходимые заголовки и библиотеки. вместо нее зато есть какаято с 2-мя или 3-мя параметрами, с которой непоятно что делать (в MSDN ничего толком не написано)...вот она кстати:
BOOL CreateThread( DWORD dwCreateFlags = 0, UINT nStackSize = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
заранее спасибо
потоки и API-функции в MFC01.02.03 05:32 Автор: dl <Dmitry Leonov>
> везде подразумевается использование MFC > вопрос номер раз: > подскажите плиз функции для работы c потоками...так чтобы > их можно было принудительно завершать из других потоков. > насколько я понял с AfxBeginThread такое не получится.
Получится, хотя по отношению к ресурсам это не есть хорошо.
> и второй вопрос: > как из MFC-проекта вызывать API-функции.. > ту же CreateThread(где 6 параметров) вызвать не > удалось...хотя я и подключил все необходимые заголовки и > библиотеки. вместо нее зато есть какаято с 2-мя или 3-мя > параметрами, с которой непоятно что делать (в MSDN ничего > толком не написано)...вот она кстати: > BOOL CreateThread( DWORD dwCreateFlags = 0, UINT nStackSize > = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); > заранее спасибо
Если вызывать как ::CreateThread, вызовется. Только использовать в этом потоке функции из MFC и стандартной библиотеки при этом надо будет крайне осторожно.
потоки и API-функции в MFC01.02.03 05:48 Автор: vh <Дмитрий> Статус: Member
> > везде подразумевается использование MFC > > вопрос номер раз: > > подскажите плиз функции для работы c потоками...так > чтобы > > их можно было принудительно завершать из других > потоков. > > насколько я понял с AfxBeginThread такое не > получится. > > Получится, хотя по отношению к ресурсам это не есть хорошо. а какой функцией это делается (принудительное закрытие потока извне)?
> Если вызывать как ::CreateThread, вызовется. Только > использовать в этом потоке функции из MFC и стандартной > библиотеки при этом надо будет крайне осторожно. большое спасибо!
потоки и API-функции в MFC01.02.03 06:04 Автор: dl <Dmitry Leonov>
> > Получится, хотя по отношению к ресурсам это не есть > хорошо. > а какой функцией это делается (принудительное закрытие > потока извне)?
TerminateThread (если нитка создавалась через AfxBeginThread, то к CWinThread::m_hThread). Но это чревато утечкой ресурсов. Разумнее свистнуть потоку, чтобы он сам корректно завершился - флажком каким-нибудь, например.
потоки и API-функции в MFC02.02.03 02:53 Автор: vh <Дмитрий> Статус: Member
> > > Получится, хотя по отношению к ресурсам это не > есть > > хорошо. > > а какой функцией это делается (принудительное закрытие > > потока извне)? > > TerminateThread (если нитка создавалась через > AfxBeginThread, то к CWinThread::m_hThread). Но это чревато > утечкой ресурсов. Разумнее свистнуть потоку, чтобы он сам > корректно завершился - флажком каким-нибудь, например.
Такая вот задача. Нужно создать поток (пишу из MFC) и если он зависнет (это будет опред. пользователь), чтобы пользователь мог без проблем закрыть его, без утечек ресурсов и прочего. Ведь это как то делается в других программах. У Рихтера искал и не нашел, он тоже советует завершать поток изнутри, а так мол чреевато. А в "профессиональном программировании на VC++" Круглински вообще только как изнутри описывается.
p.s. кстати как завершить поток извне созданный _beginthreadex
потоки и API-функции в MFC02.02.03 04:44 Автор: _йцукенг_ Статус: Незарегистрированный пользователь
> > > > Получится, хотя по отношению к ресурсам это > не > > есть > > > хорошо. > > > а какой функцией это делается (принудительное > закрытие > > > потока извне)? > > > > TerminateThread (если нитка создавалась через > > AfxBeginThread, то к CWinThread::m_hThread). Но это > чревато > > утечкой ресурсов. Разумнее свистнуть потоку, чтобы он > сам > > корректно завершился - флажком каким-нибудь, например. > > Такая вот задача. Нужно создать поток (пишу из MFC) и если > он зависнет (это будет опред. пользователь), чтобы > пользователь мог без проблем закрыть его, без утечек > ресурсов и прочего. Ведь это как то делается в других > программах. >У Рихтера искал и не нашел, он тоже советует
> завершать поток изнутри, а так мол чреевато. >А в "профессиональном программировании на VC++" Круглински
> вообще только как изнутри описывается. пиши программы так, чтобы потоки не висли.
а вообще-то вполне нормально в потоке в цикле проверять значение Event-а, используемого только для цели информирования рабочих потоков о том, что пора закругляться.
очень рекомендую использовать NuMega BoundsChecker - продукт просто незаменимый для нахождения разных там утечек.
> p.s. кстати как завершить поток извне созданный > _beginthreadex тем же самым TerminateThread.
передаёшь хэндл потока.
потоки и API-функции в MFC02.02.03 04:33 Автор: dl <Dmitry Leonov>
> Такая вот задача. Нужно создать поток (пишу из MFC) и если > он зависнет (это будет опред. пользователь), чтобы > пользователь мог без проблем закрыть его, без утечек > ресурсов и прочего. Ведь это как то делается в других > программах. У Рихтера искал и не нашел, он тоже советует > завершать поток изнутри, а так мол чреевато. А в > "профессиональном программировании на VC++" Круглински > вообще только как изнутри описывается.
Ну что значит "зависнет". Т.е. у него внутри есть какой-то длительный счет, героический цикл и т.п.? Так и писать надо сразу с учетом такой возможности, раскидывая по таким кускам кода проверку флажков.
> p.s. кстати как завершить поток извне созданный > _beginthreadex
Ну так она же хэндл возвращает.
я смотрю тут никто не спит :)02.02.03 05:01 Автор: vh <Дмитрий> Статус: Member
> > Ну что значит "зависнет". Т.е. у него внутри есть какой-то > длительный счет, героический цикл и т.п.? Так и писать надо > сразу с учетом такой возможности, раскидывая по таким > кускам кода проверку флажков.
я был бы рад, чтобы она не зависала. Но это не от меня зависит. Я просто вызываю FindFirstFile в сети, которая (работа с сетью), как известно, очень криво реализована в Виндоусе (тот, кто часто лазит по большой локальной сети, меня поймет)
Хотелось бы сделать все самому (тогда можно было бы все контролировать) , но, к сожалению, как я не старался найти описание протокола SMB (искал на MSDN, здесь спрашивал..) не нашел. Единственно, что остается это лезть в исходники Samba Server. :(
Так значит решения этой задачи (о завершении потока) в общем случае не существует? даже в NT?
> > p.s. кстати как завершить поток извне созданный > > _beginthreadex > > Ну так она же хэндл возвращает. понял, спасибо.
кстати никто не подскажет адрес технического форума Microsoft?
я смотрю тут никто не спит :)02.02.03 05:19 Автор: dl <Dmitry Leonov>
> я был бы рад, чтобы она не зависала. Но это не от меня > зависит. Я просто вызываю FindFirstFile в сети, которая > (работа с сетью), как известно, очень криво реализована в > Виндоусе (тот, кто часто лазит по большой локальной сети, > меня поймет) > Хотелось бы сделать все самому (тогда можно было бы все > контролировать) , но, к сожалению, как я не старался найти > описание протокола SMB (искал на MSDN, здесь спрашивал..) > не нашел. Единственно, что остается это лезть в исходники > Samba Server. :( > Так значит решения этой задачи (о завершении потока) в > общем случае не существует? даже в NT?
А, ну если зависание это от самой программы не зависит, то тут делать нечего, придется действительно аварийно прибивать.
> кстати никто не подскажет адрес технического форума > Microsoft?