![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 1 Всего: 99 |
Я там просто мысли по управлению потока высказывал А слово кстати volatile (при объявлении переменных) тебе что-нибудь говорит? Если нет, то почитай про него что-нибудь в инете. Это очень важно при работе с потоками. Но тут как видно дело было именно в выделении памяти, точнее в ее невыделении А можешь полностью код запостить - интересно посмотреть, что у тебя получлось. Создание потока тоже если можно... Просто в VB с этим проблемы какие-то, а ты тут в принципе API пользуешься, можно попробовать перевести то, что ты написал и посмотреть будет ли работать в VB -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
cardinal
"volatile" "то в локальных переменных этого потока оказывается такая чушь !!!"---Это ты про это ? или про это : ??? ""Но тут как видно дело было именно в выделении памяти, точнее в ее невыделении"" "А можешь полностью код запостить - интересно посмотреть, что у тебя получлось." Пока не могу, до конца ещё не до делал, кстати в "Visual C++ and MFC", про такой способ завершения потока вообще ничего не сказанно, сказанно лишь, что существует TerminateThread(%%%, %%%); и GetExitCodeThread(%%%, %%%);, а дальше сам думай... не хорошо поступили |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Всё ура!!!... с переменными разобрался... кстати тоже мучился около недели...
Если кому-то интересно : ПОТОК -_- Вообще-то проблема была в местах использования этих переменных... Я записывал, допустим из файла в цикле значения в переменные, вот так я делал : (кому не трудно, плиз, сделайте "код" на этих записях !) ///////Глобальное.../////// ifstream config; ifstream config_2; ofstream log_my; CWinThread *Main_pot; /////////////////////////////// UINT Potoc(LPVOID pParam) { char N[37]; int P_I = 0; for(;;) { P_I = 0; config.open("config.C"); config_2.open("config_2.C"); log_my.open("last_Status.C"); config >> N; config_2 >> P_I; log_my << N << endl << P_I << endl; log_my.flush(); GlobalFree(N); // Некорректное исполнение config_2.close(); // ______________________ config.close(); // _________________ log_my.close(); //_________ Sleep(6000); //_____ } } ............................................... void CProg::OnStart() { ................................. Main_pot = AfxBeginThread((AFX_THREADPROC)Potoc, (LPVOID)&Status, THREAD_PRIORITY_NORMAL, 0, 0, NULL); Main_pot->m_bAutoDelete = FALSE; } ................................ void CProg::OnStop() { ................................................ LPDWORD lp_my_ret; lp_my_ret = new DWORD; TerminateThread(Main_pot->m_hThread, 0); GetExitCodeThread(Main_pot->m_hThread, lp_my_ret); while(*lp_my_ret == STILL_ACTIVE) { Sleep(10); GetExitCodeThread(Main_pot->m_hThread, lp_my_ret); } config_2.close(); config.close(); log_my.close(); GlobalFree(Main_pot); GlobalFree(lp_my_ret); .................. } Вот если успевать нажать на СТОП во время спячки Main_pot, то после повторного запуска, в переменных окажется мега-чушь, а если заменить вот эти строчки : ............................. GlobalFree(N); // Некорректное исполнение config_2.close(); // ______________________ config.close(); // _________________ log_my.close(); //_________ Sleep(6000); //_____ ............................. на эти : ............................. Sleep(6000); //_____ GlobalFree(N); // Корректное исполнение config_2.close(); // ______________________ config.close(); // _________________ log_my.close(); //_________ ............................. То всё будет нормально !!! Так как я с памятью ещё не очень научился работать, то по научному обьяснить не могу |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
cardinal
За volatile спасибо, каждый день открываю что-нибудь новое для себя... Насколько понял, это способ оптимизации, так ? |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 1 Всего: 99 |
Это способ "защиты" переменной от потери данных -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
"Это способ "защиты" переменной от потери данных "
Ну тыды, я правильно сделал, что не использовал его, так как мне имхо надо было наоборот избавиться от данных, как можно лучше... |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 165 |
volatile - указывает оптимизеру что эту переменную нельзя хранить в регистрах поскольку она долговечная.. --------------------
|
||||
|
|||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 1 Всего: 99 |
Не не совсем так, см. тут: http://doc.mpv.ru/steps/mfc/steps/339.html -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 1 Всего: 99 |
Ну и что значит слово "долговечная" -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 165 |
cardinal
Ияжочем.. --------------------
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |