Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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,000
По умолчанию

вообще то функция возвращает хендл потока, а третий параметр будет передан потоку.
Код:
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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
многопоточность 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