Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 16.04.2012, 12:57   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Многопоточность

Необходимо создать поток и ожидать его завершения, после чего продолжить выполнение кода функции main.

Код:
void Thread(void* pParams) {
//...
}

main() {
HANDLE hThread;
_beginthread(Thread, 0, hThread); // создаём поток
WaitForSingleObject(hThread, INFINITE); // ждём момента его завершения
//...
return 0;
}
Этот способ работает некорректно, так как исполнение кода потока происходит одновременно с исполнением кода ф-ии main. Скорее всего надо добавить ещё анализирование возвращаемого значения ф-ии WaitForSingleObject. Подскажите, пожалуйста, что в приведённом коде неправильно реализовано?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 16.04.2012, 13:07   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

вообще то функция возвращает хендл потока, а третий параметр будет передан потоку.
Код:
hThread=_beginthread(Thread, 0, 0) // создаём поток
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.04.2012, 13:30   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вообще то функция возвращает хендл потока, а третий параметр будет передан потоку.
Код:
hThread=_beginthread(Thread, 0, 0) // создаём поток
unsigned long _RTLENTRY _EXPFUNC _beginthread
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 16.04.2012, 14:07   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

t2skler

Этот способ работает некорректно ...

... потому что это какая-то лажа.

Правильный способ:

HANDLE thread = (HANDLE) _beginthreadex(...);
WaitForFingleObject(thread, INFINITE);
Rififi вне форума Ответить с цитированием
Старый 16.04.2012, 14:24   #5
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
t2skler

Этот способ работает некорректно ...

... потому что это какая-то лажа.

Правильный способ:

HANDLE thread = (HANDLE) _beginthreadex(...);
WaitForFingleObject(thread, INFINITE);
Лажа, согласен. В первоначальном варианте всё так и было. Но получив ошибку
Цитата:
Cannot convert 'unsigned long' to 'void *'
я принял возвращаемое значение, как значение для анализа ошибок.

Ну и конечно же спасибо за помощь
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
многопоточность Freddi Krjuger Общие вопросы по Java, Java SE, Kotlin 1 15.05.2011 23:46
Многопоточность alex0097 Общие вопросы Delphi 3 05.05.2011 22:46
Многопоточность WennY Общие вопросы Delphi 11 23.04.2011 00:46
многопоточность @lenk@ Помощь студентам 1 26.10.2010 20:50
Многопоточность CrazyDude Общие вопросы Delphi 1 18.04.2010 19:00


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS