|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2010, 18:05 | #1 |
Пользователь
Регистрация: 01.10.2010
Сообщений: 24
|
Работа с потоками
Здравствуйте!
У меня программа, которая считывает данные с порта и записывает их в файл. Считывание проводится с помощью потока. Вопросы: Как правильно закрывать файл и поток? Как проверить или они закрылись? Как сделать так, чтоб при закрытии всей программы, если запись в файл не закончилась, то дописать в него, а потом закрыть программу? закрываю потоки так: Код:
|
29.10.2010, 18:35 | #2 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
файл надо закрывать через closehandle, других вариантов нет. поток должен завершаться сам, т.е. в конце его выполнения должно быть ExitThread(0).
проверка существования потока WaitForSingleObject если поток сейчас выполняется, функция ждёт когда поток завершится или истечём время указанное во втором параметре и только тогда вернёт управление, если потока нет, то ожидания не будет. Используй эту функцию указав вторым параметром ноль и анализируй код ошибки через GetLastError. ситуация когда необходима проверка "закрыт ли файл" возникает при неправильном проектировании программы. Функция открыла файл то она должна его закрыть, ситуация когда один поток отрывает файл, а другой закрывает возникает при неправильном проектировании программы. Цитата:
поток который работает с файлом или портом только сам открывать и закрывать файл. Функция TerminateThread предназначена для аварийных ситуаций и принудительного завершения. При закрытии программы достаточно поставить WaitForSingleObject. Последний раз редактировалось rpy3uH; 29.10.2010 в 18:41. |
|
29.10.2010, 20:52 | #3 |
Пользователь
Регистрация: 01.10.2010
Сообщений: 24
|
Спасибо, вам за советы!
Но хочу уточнить... У меня два потока - один для чтения байт из порта и запись их в файл и еще один для посылки данных в порт. Поток для чтения реагирует на событие прихода байта в порт, тогда он считывает приходящие байты и заносит в файл. Закрывается поток при нажатии на кнопку Закрыть порт и при закрытии формы. Поток записи в порт активируется на кнопке Передать и после передачи приостанавливается. Теперь вопрос: где мне ставить ExitThread(0)? в самом потоке? А в обработчике кнопки закрыть и закрития формы ставить какой-то флаг? К примеру так: Код:
Дальше проверка правильности закрытия мне нужно для того, чтобы в случае какой-то ошибки порт не оказался заблокирован до перезагрузки системы...Для этого мне проверить, наверное, надо или закрылся правильно сам порт, правильно? Потоки тут же не при чем? То есть if(!CloseHandle(port))? Если CloseHandle(port)=0, то ошибка и ошибку ловить GetLastError(). Так? А как потом реагировать на эти ошибки? А для файла WaitForSingleObject(handle, INFINITE), так? Файл освобождается от записи а потом его закрыть... Извиняюсь за такое количество вопросов...) Последний раз редактировалось rpy3uH; 01.11.2010 в 08:40. |
01.11.2010, 08:53 | #4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
если я всё правильно понял, то надо примерно так
Код:
при нажатии на кнопку "закрыть" надо сделать примерно следующее Код:
Последний раз редактировалось rpy3uH; 01.11.2010 в 08:56. |
05.11.2010, 02:30 | #5 |
Пользователь
Регистрация: 01.10.2010
Сообщений: 24
|
Сделал! Вроде, работает! Спасибо большое!!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с потоками | gagarin0 | Помощь студентам | 0 | 28.10.2010 22:12 |
работа с потоками | session | Общие вопросы C/C++ | 6 | 21.06.2010 17:13 |
Работа с потоками | Neymexa | Общие вопросы .NET | 16 | 23.04.2009 17:42 |
работа с потоками | Alex_Pro | Общие вопросы .NET | 1 | 01.07.2008 07:25 |
C++, работа с потоками | mat90x | Помощь студентам | 20 | 15.05.2008 22:20 |