2010-02-08 4 views
0

Im пишущих DLL и я хочу написать некоторые данные в файл (150k +)WriteFile с библиотеками DLL

Проблема - WriteFile не писать все, что нужно записать

Похоже, что поток получает прекращается прежде чем WriteFile завершит свою работу.

любые идеи? благодаря

+3

Небольшой фрагмент кода будет более информативным ... – Eugene

+3

Ну, если поток прекращается, найдите, где это происходит, и прекратите его прекращать. – GManNickG

ответ

3

Если вы завершите процесс до завершения нити, все остальные потоки будут прекращены (от ExitProcess):

Выход процесса вызывает следующее:

  1. Все из потоки в процессе, за исключением вызывающего потока, завершают свое исполнение без , получая уведомление DLL_THREAD_DETACH .
  2. Состояние всех потоков, завершенных на шаге 1, становится сигналом.
  3. Функции входной точки для всех загруженных библиотек динамической компоновки (DLL) вызываются с DLL_PROCESS_DETACH.
  4. После того, как все связанные DLL-файлы выполнили любой код завершения процесса, , функция ExitProcess завершает текущий процесс, включая вызывающий поток .
  5. Состояние вызывающей нити становится сигналом.
  6. Все дескрипторы объектов, открытые процессом, закрыты.
  7. Состояние завершения процесса изменяется с STILL_ACTIVE на на выходное значение процесса.
  8. Состояние объекта процесса становится сигналом, удовлетворяющим любым потокам, ожидавшим завершения процесса .

Вам нужно будет явно ждать поток исполняющего WriteFile, чтобы закончить, как правило, через WaitForSingleObject(thread handle, ...).

+0

Также обратите внимание, что если процесс завершается (а не выходит), это еще хуже - 'DLL_PROCESS_DETACH' не вызывается в этом случае. –