Короче, сделал устройство, которое по Bluetooth передаёю данные в комп с частотой 500 Гц. Использую стандартный Bluetooth-адаптер для компа DBT-122. С помощью его драйверов эмулируется виртуальный COM4 - порт, когда передача идёт по SPP-профилю, как в моём случае. Всё работает, всё отлично! Но экран моргает и процессор перегружен. Тут код этой функции, которая осуществляет вывод на экран: Код (Text): .data lpBuffer db "B",0h lpBuffer2 db 0h,0h dFlag dd ? hCom dd ? hFile_data dd ? hFile_data2 dd ? hEvent dd ? nNumberOfBytesToWrite dd ? lpNumberOfBytesWritten dd ? lpOverlapped OVERLAPPED <?> lpThreadId dd ? lpThreadHandle dd ? dExitCode dd ? .code portfunc PROTO :DWORD,:DWORD portfunc proc open:DWORD,hWnd:DWORD local _dcb:DCB local dwWait:DWORD local ddResult:DWORD invoke SelectObject,gl_memdc,hPen invoke CreateFile,offset checked_port,GENERIC_READ or GENERIC_WRITE,0h,0h,OPEN_EXISTING,FILE_FLAG_OVERLAPPED or FILE_ATTRIBUTE_NORMAL,0h mov hCom,eax invoke GetCommState,hCom,addr _dcb push esi lea esi,_dcb assume esi:ptr DCB mov [esi].BaudRate,CBR_19200 mov [esi].ByteSize,8h mov [esi].Parity,NOPARITY mov [esi].StopBits,ONESTOPBIT assume esi:nothing pop esi invoke SetCommState,hCom, addr _dcb invoke CreateEvent,0h,FALSE,FALSE,0h mov hEvent,eax mov lpOverlapped.hEvent,eax invoke SetCommMask,hCom,EV_RXCHAR mov edx,1h mov dFlag,edx mov nNumberOfBytesToWrite,1h jmp over again: mov edx,dword ptr nNumberOfBytesToWrite invoke ReadFile,hCom,offset lpBuffer2,edx,offset lpNumberOfBytesWritten,offset lpOverlapped invoke WaitForSingleObject,hEvent,10000 mov ddResult,eax .if eax==WAIT_OBJECT_0 invoke GetOverlappedResult,hCom,offset lpOverlapped,offset lpNumberOfBytesWritten,FALSE mov eax,lpNumberOfBytesWritten .if eax==0h mov eax,dFlag .if eax==0h jmp exit_thread .endif jmp again .endif .else mov eax,ddResult .if eax==WAIT_TIMEOUT invoke MessageBox,0h,$CTA0("No Data in port"),$CTA0("Time out"),MB_OK jmp exit_thread .endif .endif .data buf dd ? cordy dd ? count10 dd ? count100 dd ? fl dd ? flbytes dd ? .code invoke WriteFile,hFile_data,offset lpBuffer2,1h,offset lpNumberOfBytesWritten,0h mov edi,offset lpBuffer2 mov eax,[edi] and eax,0FFh mov edi,offset buf .if fl==0h mov fl,1h mov [edi],eax jmp again .else mov fl,0h shl eax,8h add eax,[edi] mov [edi],eax mov ecx,eax and ecx,8000h .if ecx!=8000h mov fl,1h jmp again .endif invoke WriteFile,hFile_data2,offset buf,2h,offset flbytes,0h mov edi,offset buf mov eax,[edi] and eax,0FFFh shr eax,4h not eax and eax,0FFh push eax push eax mov edi,offset cordy mov edx,[edi] invoke MoveToEx,gl_memdc,510,edx,0h pop eax invoke LineTo,gl_memdc,510,eax pop eax mov [edi],eax invoke BitBlt,gl_memdc2,STICK,0h,xm,ym,gl_memdc,0h,0h,SRCCOPY invoke BitBlt,gl_memdc,0h,0h,xm,ym,gl_memdc2,0h,0h,SRCCOPY add count10,1h .if count10==20h invoke InvalidateRect,hWnd_,0h,0h mov count10,0h .endif .endif mov eax,dFlag .if eax!=0h jmp again .endif exit_thread: invoke CloseHandle,hEvent invoke CloseHandle,hCom invoke CloseHandle,hFile_data invoke CloseHandle,hFile_data2 invoke GetExitCodeThread,lpThreadHandle,offset dExitCode .if eax!=0h ;invoke MessageBox,0h,$CTA0("Поток завершается"),$CTA0("Поток завершается"),MB_OK .else invoke MessageBox,0h,$CTA0("Error"),$CTA0("Error"),MB_OK .endif invoke ExitThread,dExitCode over: invoke CreateFile,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h mov hFile_data,eax invoke CreateFile,$CTA0("data2.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h mov hFile_data2,eax mov count10,0h mov count100,0h mov flbytes,2h invoke CreateThread,0h,0h,offset again,0h,0h,lpThreadId mov lpThreadHandle,eax ret portfunc endp Код (Text): invoke BitBlt,gl_memdc2,STICK,0h,xm,ym,gl_memdc,0h,0h,SRCCOPY invoke BitBlt,gl_memdc,0h,0h,xm,ym,gl_memdc2,0h,0h,SRCCOPY Это 2 виртуальных окна, с помощью которых я двигаю изображение влево. А потом копирую виртуальное окно на реальное с помощью invoke InvalidateRect,hWnd_,0h,0h. Может быть это из-за invoke InvalidateRect,hWnd_,0h,0h ??? Может быть можно как-то это оптимизировать???