• XSS.stack #1 – первый литературный журнал от юзеров форума

C/C++ async вопрос

badsci

HDD-drive
Пользователь
Регистрация
28.03.2020
Сообщения
43
Реакции
45
Всем привет,возникла потребность запустить асинхронно в 2 потоках функцию,использовал std:async/future,но все это добавляет аж 100 кб при сборке проекта(собираю /MD).Мне не принципиально смотреть ретерны функции,никаких математических исчислений там нету,также мне не нравится конечный вес.Знает кто решение данной дилеммы?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ТС, ты юзаешь stl, оттуда такой большой вес. Если даже не захочешь смотреть на все ретерны и т.д., то стд полюбас добавит линки в проект + очень много проверок. Собирать нужно всегда в /mt, а в /md нужно собирать когда юзаешь чистый винапи, тем более без crt! stl, crt яв-ся лишь оберткой на функциях винапи. Например, как вариает CreateThread для создание потока через винапи (вот и линк на рук док http://vsokovikov.narod.ru/New_MSDN_API/Process_thread/fn_createthread.htm). Веса практически не добавит, но могу сказать, разобраться в параметрах, структурах оч сложно, так что, вообще придется учить винапи, если вес не устраивает.
 
Это очевидно,что надо учить апи,я практически всю программу так написал,только у меня не получилось прочитать нормально с веба строку динамически,отсюда у меня stl.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я активно учу апи,но там в конце треда идёт ExitProcess,но он опять же синхронно выполняется.
тогда то, что юзал наведи курсов и нажи ctrl+enter и попадешь в сорца, посидев дня два с пивком можешь сделать уже норм варик, свой (потому что как я и сказал выше, все это обертка над винапи)
Это очевидно,что надо учить апи,я практически всю программу так написал,только у меня не получилось прочитать нормально с веба строку динамически,отсюда у меня stl.
с веба прочитать строку? Я не догоняю
 
На сколько я понял,невозможно без ExitThread выйти из потока-основная проблема почему я пошел искать другие варианты,а по поводу строки,то мне надо скачать как-то(я пытался через гет запрос и не получилось,пришлось прибегнуть к std::)
строку с php скрипта,своеобразный лоадер знаешь ли
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На сколько я понял,невозможно без ExitThread выйти из потока-основная проблема почему я пошел искать другие варианты,а по поводу строки,то мне надо скачать как-то(я пытался через гет запрос и не получилось,пришлось прибегнуть к std::)
строку с php скрипта,своеобразный лоадер знаешь ли
что скачать? Я так и не понял. А так, выделяешь при помощи malloc память под тип char или wchar_t для юникода, заполняешь нулями memset по размеру (или юзай сразу calloc, который выделит и заполниит нулями). Это все под строку. После заполняешь выделенный массив данных
C:
wchar_t* data = (wchar_t*)malloc(1024*sizeof(wchar_t)); // Выделяем динамик память
memset(data, 0, 1024*sizeof(wchar_t)); // заполняем нулями, чтоб комплиятор потом понял, где конец
// Иначе выделенная строка в куче будет содержать мусор (вроде это обычно предыдущие выделенные данные)

GetRequest(data);
//GetRequest - это твоя функция, которая делает реквест, а в качестве параметра берет
//указатель на строку т.е. GetRequest(wchar_t* data);
Код не тестил, но должно работать.

p.s. а вообще, нужно самому научиться работать со строками или написать аналогию строки (новый тип данных). Сперва покажется сложным работать со строками, потому что ты начинал с плюсов, а там все готово. А если начал бы с Сишки, то таких вопросов не возникало бы
 
Спасибо за ответ,слышал,что malloc лучше заменять на new/delete,сам так делаю,а на счет вопроса что скачать-единственную строку с php файла(просто строку).Мы отошли от асинхронного потока,возможно ли сделать это использую CreateThread/CreateRemThr?Как я уже написал выше,проблема в ExitThread() в конце каждого треда,а это, в свою очередь не дает им работать параллельно.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
слышал,что malloc лучше заменять на new/delete
Для плюсов да, тк new будет вызывать конструкторы, а delete - деструкторы классов, если ты используешь их для обычных данных - нет разницы, тк new/delete просто вызовет malloc/free.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Спасибо за ответ,слышал,что malloc лучше заменять на new/delete,сам так делаю,а на счет вопроса что скачать-единственную строку с php файла(просто строку).Мы отошли от асинхронного потока,возможно ли сделать это использую CreateThread/CreateRemThr?Как я уже написал выше,проблема в ExitThread() в конце каждого треда,а это, в свою очередь не дает им работать параллельно.
new/delete это тоже самое, что malloc, а malloc тоже самое, что HeapAlloc() (винапи). new/delete юзается в плюсах, входит в stl.
Насколько я помню, при помощи CreatThread или аналог функции можно задать определнное кол-во фунцкии (т.е. ты вызываешь асинхронно несколько функций). Т.е. перед юзанием этой апишки, ты должен вызвать другую. Вот, тут самый раз для чайников www. youtube .com/watch?v=d4gHLx3bklc&list=PLusrwvSv5LhFTbiIrrwV-YAnUCdrIZCDv&index=13

Всм скачать строку? не понял. Как ты собираешься скачать строку? Мб вырезать строку с php страницы? Смотри, есть такая штука в винапи, которая ищет по маске в буфере данные и выводит позицию строки, после берешь эту позицию и вырезаешь буфер.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Мы отошли от асинхронного потока,
Потоки и асинхронность - разные вещи, что ты хочешь, я так и не понял, даже после второго прочтения всего топика.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
new/delete это тоже самое, что malloc, а malloc тоже самое, что HeapAlloc() (винапи). new/delete юзается в плюсах, входит в stl.
Насколько я помню, при помощи CreatThread или аналог функции можно задать определнное кол-во фунцкии (т.е. ты вызываешь асинхронно несколько функций). Т.е. перед юзанием этой апишки, ты должен вызвать другую. Вот, тут самый раз для чайников www. youtube .com/watch?v=d4gHLx3bklc&list=PLusrwvSv5LhFTbiIrrwV-YAnUCdrIZCDv&index=13

Всм скачать строку? не понял. Как ты собираешься скачать строку? Мб вырезать строку с php страницы? Смотри, есть такая штука в винапи, которая ищет по маске в буфере данные и выводит позицию строки, после берешь эту позицию и вырезаешь буфер.
Интересно, откуда ты собрался "вырезать строку"?
Допустим есть след. скрипт:
PHP:
<?php
echo "hello";
?>
Доступен по http://localhost/hello.php
Какие маски, какой буфер? Не вводи в заблуждение.
ТС, тебе нужно отправить отправить GET/POST запрос на сервер, с помощью InternetReadFile прочитать ответ. Можешь использовать WinInet/WinHTTP, есть много плюшек, по сравнению с WinSock2. Подробнее глянь в гугле. Не совсем понимаю только для чего тут многопоток?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Интересно, откуда ты собрался "вырезать строку"?
Допустим есть след. скрипт:
PHP:
<?php
echo "hello";
?>
Доступен по http://localhost/hello.php
Какие маски, какой буфер? Не вводи в заблуждение.
ТС, тебе нужно отправить отправить GET/POST запрос на сервер, с помощью InternetReadFile прочитать ответ. Можешь использовать WinInet/WinHTTP, есть много плюшек, по сравнению с WinSock2. Подробнее глянь в гугле. Не совсем понимаю только для чего тут многопоток?
Я вообще не понял, что собирался чел вырезать. Я имел ввиду скачать файл, разместить, а после с ним уже работать.
 
Интересно, откуда ты собрался "вырезать строку"?
Допустим есть след. скрипт:
PHP:
<?php
echo "hello";
?>
Доступен по http://localhost/hello.php
Какие маски, какой буфер? Не вводи в заблуждение.
ТС, тебе нужно отправить отправить GET/POST запрос на сервер, с помощью InternetReadFile прочитать ответ. Можешь использовать WinInet/WinHTTP, есть много плюшек, по сравнению с WinSock2. Подробнее глянь в гугле. Не совсем понимаю только для чего тут многопоток?
Так и сделаю,многопоток тут ни при чем,решил заодно спросить,чтобы топик не создавать.Мне просто нужно было считать строку с php
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх