Нужно как-то как можно проще организовать стоп-процесс при выполнении ассемблерной вставки. Под DOS было просто: mov ah,1 int 21h Делать это средствами С++ по задаче не выгодно, а в asm-вставке пока не сообразил как
Если нужно сделать типа шелл-команды pause, то есть несколько вариантов: 1. Собственно говоря, сама команда pause. 2. Документированный способ: WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE)), но просто так он работать не будет. 3. Более навороченный способ: Код (Text): hIn = GetStdHandle(STD_INPUT_HANDLE); while(ReadConsoleInput(hIn,&input_record,1,&aux)){ if(input_record.EventType == KEY_EVENT) break; Sleep(0); } К сожалению, этот последний способ всё равно не так стабильно работает на последних виндах как хотелось бы.
Quantum Я так и чувствовал, что без консольной функции не обойтись. Еще маленький вопрос. Эти три строки можно запихнуть в создаваемую собой макробиблиотеку, т.к. хочу это все вызывать в ассемлерной вставке несколькораз
char getch() { DWORD cmode,er; INPUT_RECORD ir; GetConsoleMode((HANDLE)GetStdHandle(STD_INPUT_HANDLE),&cmode); SetConsoleMode((HANDLE)GetStdHandle(STD_INPUT_HANDLE),0); while(ReadConsoleInput((HANDLE)GetStdHandle(STD_INPUT_HANDLE),&ir,1,&er)) { if(ir.EventType==KEY_EVENT) { if(ir.Event.KeyEvent.bKeyDown==TRUE) break; } }; SetConsoleMode((HANDLE)GetStdHandle(STD_INPUT_HANDLE),cmode); return(ir.Event.KeyEvent.uChar.AsciiChar); }
khv_test У меня ещё FlushConsoleInputBuffer перед циклом для большей надёжности sarmat Можно, конечно. Или поместить пример khv_test в статическую либу...