Сообщение Re[5]: AfxBeginThread и InitInstance() от 24.06.2016 11:02
Изменено 24.06.2016 11:40 Sergey_BG
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Что за дичь ты написал?
Почему дичь? Я знаю MFC и многопоточность. Я понимаю, что спросил ТС.
Я написал следующее (может быть не совсем ясно):
1) у ТС есть функция GetTemp(). Если в ней и в функции SetTemp(...) поставить EnterCriticalSection, то это заблокирует доступ второму потоку пока с переменной работает первый поток. И что самое интересное, если первый поток с переменной не работает, то не важно выполняет он, что либо, или нет. Метод будет вызван. В тоже время посылка сообщения другому потоку приведёт к тому, что SendMessage придётся ждать пока второй поток не войдет в режим ожидания очередного сообщения GetMessage etc. Именно в нём сработает SendMessage и только потом вернёт управление первому потоку. Что может быть достаточно долго, в зависимости от того, что делает поток. Т.е. плюс. Но есть один минус. Нужно быть уверенным, что поток не завершён. При посылке сообщения, правда тоже нужно знать, не завершился ли поток.
2) Есть ещё одна синхронизация которую нужно сделать. Это доступ к переменной потока. Так как по идее в любой момент поток может быть удалён (если стоит автоделит). Здесь тоже придётся принять некоторые меры.
ES>Что за дичь ты написал?
Почему дичь? Я знаю MFC и многопоточность. Я понимаю, что спросил ТС.
Я написал следующее (может быть не совсем ясно):
1) у ТС есть функция GetTemp(). Если в ней и в функции SetTemp(...) поставить EnterCriticalSection, то это заблокирует доступ второму потоку пока с переменной работает первый поток. И что самое интересное, если первый поток с переменной не работает, то не важно выполняет он, что либо, или нет. Метод будет вызван. В тоже время посылка сообщения другому потоку приведёт к тому, что SendMessage придётся ждать пока второй поток не войдет в режим ожидания очередного сообщения GetMessage etc. Именно в нём сработает SendMessage и только потом вернёт управление первому потоку. Что может быть достаточно долго, в зависимости от того, что делает поток. Т.е. плюс. Но есть один минус. Нужно быть уверенным, что поток не завершён. При посылке сообщения, правда тоже нужно знать, не завершился ли поток.
2) Есть ещё одна синхронизация которую нужно сделать. Это доступ к переменной потока. Так как по идее в любой момент поток может быть удалён (если стоит автоделит). Здесь тоже придётся принять некоторые меры.
Re[5]: AfxBeginThread и InitInstance()
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Что за дичь ты написал?
Почему дичь? Я знаю MFC и многопоточность. Я понимаю, что спросил ТС.
Я написал следующее (может быть не совсем ясно):
1) у ТС есть функция GetTemp(). Если в ней и в функции SetTemp(...) поставить CSingleLock с СCriticalSection, то это заблокирует доступ второму потоку пока с переменной работает первый поток. И что самое интересное, если первый поток с переменной не работает, то не важно выполняет он, что либо, или нет. Метод будет вызван. В тоже время посылка сообщения другому потоку приведёт к тому, что SendMessage придётся ждать пока второй поток не войдет в режим ожидания очередного сообщения GetMessage etc. Именно в нём сработает SendMessage и только потом вернёт управление первому потоку. Что может быть достаточно долго, в зависимости от того, что делает поток. Т.е. плюс. Но есть один минус. Нужно быть уверенным, что поток не завершён. При посылке сообщения, правда тоже нужно знать, не завершился ли поток.
2) Есть ещё одна синхронизация которую нужно сделать. Это доступ к переменной потока. Так как по идее в любой момент поток может быть удалён (если стоит автоделит). Здесь тоже придётся принять некоторые меры.
ES>Что за дичь ты написал?
Почему дичь? Я знаю MFC и многопоточность. Я понимаю, что спросил ТС.
Я написал следующее (может быть не совсем ясно):
1) у ТС есть функция GetTemp(). Если в ней и в функции SetTemp(...) поставить CSingleLock с СCriticalSection, то это заблокирует доступ второму потоку пока с переменной работает первый поток. И что самое интересное, если первый поток с переменной не работает, то не важно выполняет он, что либо, или нет. Метод будет вызван. В тоже время посылка сообщения другому потоку приведёт к тому, что SendMessage придётся ждать пока второй поток не войдет в режим ожидания очередного сообщения GetMessage etc. Именно в нём сработает SendMessage и только потом вернёт управление первому потоку. Что может быть достаточно долго, в зависимости от того, что делает поток. Т.е. плюс. Но есть один минус. Нужно быть уверенным, что поток не завершён. При посылке сообщения, правда тоже нужно знать, не завершился ли поток.
2) Есть ещё одна синхронизация которую нужно сделать. Это доступ к переменной потока. Так как по идее в любой момент поток может быть удалён (если стоит автоделит). Здесь тоже придётся принять некоторые меры.