Здравствуйте, Zeter, Вы писали:
Z>У меня возникает ситуация в которой в одном потоке крутится примитивный Веб сервер. Для остановки потока я использую TerminateThread(). Вопрос: каким способом можно еще остановить поток если о висит на прослушке порта и не доходит до своего конца (if (terminated)) пока не поступит сообщение на порт.
Не делать так.
Во-первых, у всех функций ожидания есть вариант с таймаутом — можно пользоваться им и с соответствующей регулярностью проверять "а не пора ли нам и честь знать". Например, раз в секунду, или в 200мсек.
А ещё лучше ожидать не одного события, а двух сразу — "приход данных" и "приход оповещения о прекращении работы".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Z>У меня возникает ситуация в которой в одном потоке крутится примитивный Веб сервер. Для остановки потока я использую TerminateThread(). Вопрос: каким способом можно еще остановить поток если о висит на прослушке порта и не доходит до своего конца (if (terminated)) пока не поступит сообщение на порт.
TerminateThread нельзя использовать никогда
TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination. For example, TerminateThread can result in the following problems:
If the target thread owns a critical section, the critical section will not be released.
If the target thread is allocating memory from the heap, the heap lock will not be released.
If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent.
If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.
Доброго всем времени суток.Хочу спросить совета у знающих людей.
У меня есть программа в которой присутствуют основной процесс и 2 потока. В основном процессе определена и описана функция записи в ЛОГ файл. Входной информацией функции является имя файла для записи и текст который надо записать. У каждого потока как и у основного процесса есть свой файл в который он записывает служебную инфу. Правильно ли это? У меня получается одна функция к которой в процессе работы обращаются как потоки так и основной процесс.
Здравствуйте, Zeter, Вы писали:
Z>Доброго всем времени суток.Хочу спросить совета у знающих людей. Z>У меня есть программа в которой присутствуют основной процесс и 2 потока. В основном процессе определена и описана функция записи в ЛОГ файл. Входной информацией функции является имя файла для записи и текст который надо записать. У каждого потока как и у основного процесса есть свой файл в который он записывает служебную инфу. Правильно ли это? У меня получается одна функция к которой в процессе работы обращаются как потоки так и основной процесс.
Ничего принципиально ошибочного в этом нет.
Гораздо интереснее вопрос, является ли это оптимальным решением в твоём случае.
Но на него невозможно ответить, основываясь на приведенных данных.
Здравствуйте, Zeter, Вы писали:
Z>Доброго всем времени суток.Хочу спросить совета у знающих людей. Z>У меня есть программа в которой присутствуют основной процесс и 2 потока. В основном процессе определена и описана функция записи в ЛОГ файл. Входной информацией функции является имя файла для записи и текст который надо записать. У каждого потока как и у основного процесса есть свой файл в который он записывает служебную инфу. Правильно ли это? У меня получается одна функция к которой в процессе работы обращаются как потоки так и основной процесс.
Ошибок, связанных с многопоточностью в этом варианте нет. Но открывать на каждый вызов файл это довольно накладно, если, конечно, у вас логгинг используется достаточно часто.
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, Zeter, Вы писали:
Z>>Доброго всем времени суток.Хочу спросить совета у знающих людей. Z>>У меня есть программа в которой присутствуют основной процесс и 2 потока. В основном процессе определена и описана функция записи в ЛОГ файл. Входной информацией функции является имя файла для записи и текст который надо записать. У каждого потока как и у основного процесса есть свой файл в который он записывает служебную инфу. Правильно ли это? У меня получается одна функция к которой в процессе работы обращаются как потоки так и основной процесс.
vsb>Ошибок, связанных с многопоточностью в этом варианте нет. Но открывать на каждый вызов файл это довольно накладно, если, конечно, у вас логгинг используется достаточно часто.
Здравствуйте, Zeter, Вы писали:
Z>Здравствуйте, vsb, Вы писали:
vsb>>Здравствуйте, Zeter, Вы писали:
Z>>>Доброго всем времени суток.Хочу спросить совета у знающих людей. Z>>>У меня есть программа в которой присутствуют основной процесс и 2 потока. В основном процессе определена и описана функция записи в ЛОГ файл. Входной информацией функции является имя файла для записи и текст который надо записать. У каждого потока как и у основного процесса есть свой файл в который он записывает служебную инфу. Правильно ли это? У меня получается одна функция к которой в процессе работы обращаются как потоки так и основной процесс.
vsb>>Ошибок, связанных с многопоточностью в этом варианте нет. Но открывать на каждый вызов файл это довольно накладно, если, конечно, у вас логгинг используется достаточно часто.
Z>Спасибо большое всем за ответы. )
PPS:
Возник еще один вопрос. Про остановку потока.
У меня возникает ситуация в которой в одном потоке крутится примитивный Веб сервер. Для остановки потока я использую TerminateThread(). Вопрос: каким способом можно еще остановить поток если о висит на прослушке порта и не доходит до своего конца (if (terminated)) пока не поступит сообщение на порт.