|
|
|
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
|
|||
|---|---|---|---|
|
#18+
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти? Кто нибудь задавался таким вопросом? У меня задача - обработка данных, получаемых с СОМ порта. Все сделал, единственное загрузка проца - на 100%. Могу ли я как нибудь регулировать процентное соотношение сводной памяти проца? PS: вся нагрузка ложится на обработчик приема данных с СОМ, вызываемого по таймеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 13:16 |
|
||
|
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
|
|||
|---|---|---|---|
|
#18+
память и процессор - разные вещи. ошибка в 17-й строке, по-любому, показывай код Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 13:18 |
|
||
|
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
|
|||
|---|---|---|---|
|
#18+
Карабас Барабаспамять и процессор - разные вещи. ошибка в 17-й строке, по-любому, показывай код Posted via ActualForum NNTP Server 1.3 многовато кода получится... Да и посуди сам, каждую долю секунды на СОМ пррходит сообщение, обработчик срабатывает несколько раз в секунду. Логично что загрузка проца 100%? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 13:25 |
|
||
|
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
|
|||
|---|---|---|---|
|
#18+
А на счет кода, без проблем, вот он: :) ////////////////////////////////////////// // // Ïîëó÷åíèå äàííûõ èç ÑÎÌ ïîðòà // unsigned char Recv () { DWORD d; COMSTAT stat; ClearCommError (hComm, &d, &stat); if (stat.cbInQue > 255) stat.cbInQue = 255; if (receiveIndex + (int) stat.cbInQue > receiveBufferSize) // Buffer overflown -- resetting receiveIndex = 0; ReadFile (hComm, &(receiveBuffer[receiveIndex]), stat.cbInQue, &d, NULL); receiveIndex += d; return receiveBuffer[receiveIndex]; } ///////////////////////////////////////////////////// // // Îáðàáîò÷èê ïðèåìà/îòïðàâêè äàííûõ â ÑÎÌ ïîðò // DWORD __stdcall ThrProc (LPVOID param) { DWORD d; COMSTAT stat; while (!needCloseWindow) { if (WaitForSingleObject (hTransmitMutex, 3000) == WAIT_OBJECT_0) // Try to get a lock on the transmit mutex { if (dataToTransmit && (dataToTransmitSize > 0)) // Success. Let's see if we have something to transmit { WriteFile (hComm, dataToTransmit, dataToTransmitSize, &d, NULL); dataToTransmitSize -= d; } ReleaseMutex (hTransmitMutex); // Release the mutex } ClearCommError (hComm, &d, &stat); // Receive if (stat.cbInQue > 0 && (Debug_stat==1)) { Recv(); } } return 0; } ////////////////////////////////////// // // Ïåðåäà÷à äàííûõ // BOOL Transmit (LPBYTE data, int dataSize, HWND hWnd) { DWORD d; COMSTAT stat; dataToTransmit = data; dataToTransmitSize = dataSize; BOOL bSuccess = dataToTransmitSize == 0; // Wait for transmition to complete... // WaitForSingleObject (hTransmitMutex, INFINITE); // ...ensure that all data has been transmitted... // ...and immediately translate data ClearCommError (hComm, &d, &stat); if (dataToTransmit && (dataToTransmitSize > 2)) { WriteFile (hComm, dataToTransmit, dataToTransmitSize, &d, NULL); dataToTransmitSize -= d; } // ..clear variables... dataToTransmitSize = 0; dataToTransmit = NULL; if (!bSuccess) { #ifndef SILENT MessageBox (hMessageWnd, "Error writing to port", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } return TRUE; } //////////////////////////////////// // // Îòêðûòèå ÑÎÌ ïîðòà // BOOL StartCOM (int portNumber, DCB *dcb, int bufferSize, HWND hWnd) { hMessageWnd = hWnd; if (bufferSize <= 0) { #ifndef SILENT MessageBox (hMessageWnd, "Invalid buffer size", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } if (portNumber <= 0) { #ifndef SILENT MessageBox (hMessageWnd, "Invalid COM port number", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } if ((dcb == NULL) || (dcb->DCBlength != sizeof (DCB))) { #ifndef SILENT MessageBox (hMessageWnd, "Invalid DCB structure", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } char s[16]; sprintf (s, "\\\\.\\COM%i", portNumber); hComm = CreateFile (s, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hComm == INVALID_HANDLE_VALUE) { #ifndef SILENT MessageBox (hMessageWnd, "Could not open COM port", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } if (!SetCommState (hComm, dcb)) { #ifndef SILENT MessageBox (hMessageWnd, "Could not set COM state", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT CloseHandle (hComm); hComm = INVALID_HANDLE_VALUE; return FALSE; } needCloseWindow = FALSE; // Create transmit mutex dataToTransmit = NULL; dataToTransmitSize = 0; // Create receive buffer receiveIndex = 0; receiveBufferSize = bufferSize; receiveBuffer = (LPBYTE) malloc (receiveBufferSize); hThread = CreateThread (NULL, 0, &ThrProc, (LPVOID) hMessageWnd, 0, NULL); return TRUE; } BOOL IsCOMStarted () { return hThread != NULL; } BOOL StopCOM () { if (hThread == NULL) { #ifndef SILENT MessageBox (hMessageWnd, "Thread is already stopped", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } // Signal the thread to terminate... needCloseWindow = TRUE; // ...and wait for it to stop. WaitForSingleObject (hThread, INFINITE); // Close handles. CloseHandle (hThread); hThread = NULL; CloseHandle (hComm); hComm = INVALID_HANDLE_VALUE; // Remove mutexes CloseHandle (hTransmitMutex); hTransmitMutex = NULL; CloseHandle (hReceiveMutex); hReceiveMutex = NULL; // Remove receive buffer free (receiveBuffer); receiveBuffer = NULL; receiveBufferSize = 0; return FALSE; } HANDLE GetCOMHandle () { return hComm; } ////////////////////////////////////////////// // // Ïîëó÷åíèå äàííûõ èç ÑÎÌ ïîðòà // BOOL Receive (LPBYTE data, int dataSize, int *dataReturned) { if (dataReturned != NULL) // Return size of the data read *dataReturned = receiveIndex; if (data != NULL) { if (receiveIndex > dataSize) // Data cannot fit into the buffer { #ifndef SILENT MessageBox (hMessageWnd, "Buffer provided is not long enought", "Error", MB_OK | MB_ICONSTOP); #endif //SILENT return FALSE; } if (receiveIndex > 0) // OK: copy the data { memcpy (data, receiveBuffer, receiveIndex); receiveIndex = 0; } } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // Èíèöèàëèçàöèÿ CComTestDlg // BOOL CComTestDlg::OnInitDialog() { HBITMAP bit_map; FIRST_FIX=0; ptr = this; CDialog::OnInitDialog(); // pWnd->Create(_T("BUTTON"), "STATUS", WS_CHILD|WS_VISIBLE|BS_BITMAP, CRect(780, 380, 840, 430), this, 1234); // m_OK.EnableWindow (false); bit_map = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_GREEN)); m_Picture.SetBitmap(bit_map); m_TransmitText.EnableWindow (false); m_ComSpin.SetRange (1, 100); m_ComSpin.SetPos (1); SetTimer (1, 100, NULL); SetTimer (2, CHECKTIME, NULL); return TRUE; // return TRUE unless you set the focus to a control } void CComTestDlg::OnCancel() { if (IsCOMStarted ()) StopCOM (); KillTimer (1); // òàéìåð íà ïðèåì áèòîâ èç ïîðòà KillTimer (2); // òàéìåð íà çàêà÷êó êîîðäèíàò ñ ñåðâåðà CDialog::OnCancel(); } /////////////////////////////////////////////////// // // Ïîäêëþ÷åíèå ê âûáðàííîìó ïîðòó (Connect) // void CComTestDlg::OnConnect() { if (IsCOMStarted ()) // Ïðîâåðêà îòêðûò ëè ÑÎÌ ïîðò { StopCOM (); m_Connect.SetWindowText ("Connect"); m_TransmitText.EnableWindow (false); m_Com.EnableWindow (true); } else { CString s; m_Com.GetWindowText (s); DCB dcb; memset (&dcb, 0, sizeof (DCB)); dcb.DCBlength = sizeof (DCB); /* sizeof(DCB) */ dcb.BaudRate = CBR_9600; /* äëÿ bluetooth CBR_9600 */ dcb.fParity = FALSE; /* Enable parity checking */ dcb.ByteSize = 8; /* Number of bits/byte, 4-8 */ dcb.Parity = NOPARITY; /* 0-4=None,Odd,Even,Mark,Space */ dcb.StopBits = ONESTOPBIT; /* 0,1,2 = 1, 1.5, 2 */ if (StartCOM (atoi (s), &dcb, 0xFFFF, m_hWnd)) { /************************************** This code I've used to initialize the device I've been working with. Surely you have another device so comment this code out. */ dcb.fDtrControl = DTR_CONTROL_ENABLE; dcb.fRtsControl = RTS_CONTROL_ENABLE; SetCommState (GetCOMHandle (), &dcb); dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fRtsControl = RTS_CONTROL_ENABLE; SetCommState (GetCOMHandle (), &dcb); // Transmit ((LPBYTE) "?", 1,m_hWnd); /*************************************/ m_Connect.SetWindowText ("Disconnect"); m_TransmitText.EnableWindow (true); m_ReceiveText.SetWindowText (""); m_Com.EnableWindow (false); } } } // Ïåðåäàòü äàííûå - Transmit void CComTestDlg::OnOK() { if (IsCOMStarted ()) { CString s; m_TransmitText.GetWindowText (s); s += "\r\n"; Transmit ((LPBYTE) (LPCTSTR) s, s.GetLength (),m_hWnd); m_ReceiveText.SetWindowText (s); } } ////////////////////////////////////////////////////// // // Îðàáîò÷èê òàéìåðîâ // void CComTestDlg::OnTimer(UINT nIDEvent) { HBITMAP bit_map; if (IsCOMStarted ()) { switch(nIDEvent){ //////////////////////////////////////////////////////////////////////////////// // Òàéìåð çàãðóçêè ôàéëîâ ñ ftp ñåðâåðà, CHECKTIME - ïåðèîä âûçîâà òàéìåðà // case 2: { CString Calerter; unsigned char DECODE = GPS_RECORD_DECODE (); if ( DECODE!= 0 ){ bit_map = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_RED)); m_Picture.SetBitmap(bit_map); if (COORDINATE__ALERT == 0x10){ Calerter.Format("Coordinate modified!"); // show coordinate alert if(TYPE_POINT==0) Calerter += " RADAR"; if(TYPE_POINT==1) Calerter += " LASER"; } if (SPEED__ALERT == 0x01 ) Calerter.Format("Speed modified!"); // show speed alert if (DECODE == 11 ) Calerter.Format("Speed and coordinate modified!"); m_alert.SetWindowText(Calerter); } else{ Calerter.Format("No alert"); m_alert.SetWindowText(Calerter); } /* bool conn = FTPDownloadFile_(src, dst, url, usr, psw); if(!conn){ m_lngError = GetLastError(); } */ } /////////////////////////////////////////// // Ïðèåì äàííûõ èç ÑÎÌ ïîðòà // case 1: { static BYTE buf[0xFFFFF]; CString convert; int d = 0; int i=0; if (Receive (buf, 0xFFFFF, &d) && d) { buf[d] = 0; CString s; CString current_A; CString current_B; int status_str=0; m_ReceiveText.GetWindowText (s); s += (LPSTR) buf; m_ReceiveText.SetWindowText (s); current_A = (LPSTR) buf; m_ReceiveText.LineScroll (0xFFFFF); /////////////////////////////////// // Îòîáðàæåíèå ðàñïàðñåííûõ äàííûõ // for(i=0;i<current_A.GetLength();i++) { NMEA_GPS_RECIEVE_DATA((LPSTR) &(((LPCTSTR) current_A) )); ptr->PDataPrint(); } } } } } CDialog::OnTimer(nIDEvent); } //////////////////////////////////////////////// // // Îáðàáîò÷èê êíîïêè Pause // void CComTestDlg::OnRefresh() { // TODO: Add your control notification handler code here if (Debug_stat==1) { Debug_stat=0; m_Refresh.SetWindowText ("Continue"); } else{ Debug_stat=1; m_Refresh.SetWindowText ("Pause"); } } //////////////////////////////////////////////// // // Îòîáðàæåíèå ðàñïàðñåííûõ äàííûõ // void CComTestDlg::PDataPrint() { int i; CString convert, convert0; if(Debug_stat==1) { convert.Format ("%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n%i : %i \r\n", NMEA_SAT[0].PRN, NMEA_SAT[0].SNR, NMEA_SAT[1].PRN, NMEA_SAT[1].SNR, NMEA_SAT[2].PRN, NMEA_SAT[2].SNR, NMEA_SAT[3].PRN, NMEA_SAT[3].SNR, NMEA_SAT[4].PRN, NMEA_SAT[4].SNR, NMEA_SAT[5].PRN, NMEA_SAT[5].SNR, NMEA_SAT[6].PRN, NMEA_SAT[6].SNR, NMEA_SAT[7].PRN, NMEA_SAT[7].SNR, NMEA_SAT[8].PRN, NMEA_SAT[8].SNR, NMEA_SAT[9].PRN, NMEA_SAT[9].SNR, NMEA_SAT[10].PRN, NMEA_SAT[10].SNR, NMEA_SAT[11].PRN, NMEA_SAT[11].SNR); m_Prn.SetWindowText(convert); // Âðåìÿ convert.Format ("%i : %i : %i", UTC_HOUR, UTC_MINUTE, UTC_SECOND); m_utc_time.SetWindowText(convert); // TOTAL_SATS convert.Format ("%i", TOTAL_SATS_IN_VIEW); m_total_sats.SetWindowText(convert); // POS_MODEL if(POS_MODEL==51) convert.Format ("3D"); if(POS_MODEL==50) convert.Format ("2D"); if(POS_MODEL==49) convert.Format ("FIX NOT AVAILABLE"); m_pos_model.SetWindowText(convert); // HDOP convert.Format ("%i.%i", HDOP_TRUNC, HDOP_REMAIND); m_hdop.SetWindowText(convert); // VDOP convert.Format ("%i.%i", VDOP_TRUNC, VDOP_REMAIND); m_vdop.SetWindowText(convert); // PDOP for(i=0;i<=9;i++) { if(PDOP_TRUNC==(48+i)) PDOP_TRUNC=i; // 48-57 (0-9) if(PDOP_REMAIND==(48+i)) PDOP_REMAIND=i; // 48-57 (0-9) } convert.Format ("%i.%i", PDOP_TRUNC, PDOP_REMAIND); m_pdop.SetWindowText(convert); } } void CComTestDlg::OnSet() { CString speed_off, speed_off1; double off; CString Period_time, Period; CString offset_latt, offset_long, temp; char buffer[10]; ////////////////////////////// // // Çàäàåì ñìåùåíèå êîîðäèíàò // m_coord_offset_x.GetWindowText(offset_latt); m_coord_offset_y.GetWindowText(offset_long); Lattitude_Deg_off=atof(offset_latt); temp=itoa(Lattitude_Deg_off,buffer,10); int length_off=temp.GetLength(); int n = offset_latt.Delete(0, length_off+1); Lattitude_Min_off=atof(offset_latt); temp=itoa(Lattitude_Min_off,buffer,10); length_off=temp.GetLength(); n = offset_latt.Delete(0, length_off+1); Lattitude_Sec_off=atof(offset_latt); Longitude_Deg_off=atof(offset_long); temp=itoa(Longitude_Deg_off,buffer,10); length_off=temp.GetLength(); n = offset_long.Delete(0, length_off+1); Longitude_Min_off=atof(offset_long); temp=itoa(Longitude_Min_off,buffer,10); length_off=temp.GetLength(); n = offset_long.Delete(0, length_off+1); Longitude_Sec_off=atof(offset_long); m_Download_Period.GetWindowText(Period); // Ïåðèîä çàêà÷êè êîîðäèíàò ñ ñåðâàêà m_speed_offset.GetWindowText(speed_off); // Ïîëó÷àåì ñìåùåíèå ïî ñêîðîñòè off= atof((LPCTSTR)speed_off); SPEED_TRUNC = SPEED_KMH_TRUNC + off; speed_off1.Format("%i",SPEED_TRUNC); m_speed_trunc.SetWindowText(speed_off1); } /////////////////////////////////////////// // // Âûõîä èç ïðîãðàììû // void CComTestDlg::OnExit() { // TODO: Add your control notification handler code here if (IsCOMStarted ()) StopCOM (); KillTimer (1); // òàéìåð íà ïðèåì áèòîâ èç ïîðòà KillTimer (2); // òàéìåð íà çàêà÷êó êîîðäèíàò ñ ñåðâåðà ExitProcess(0x00); } ///////////////////////////////////////// // // Çàãðóçêà ôàéëîâ ñ ftp ñåðâåðà // bool CComTestDlg::FTPDownloadFile_(const char * src, const char * dst, char * url, char * usr, char * psw) { const char* dir="/"; long m_lngError=0; HINTERNET m_hndInet=0; HINTERNET m_hndFTP=0; m_hndInet = InternetOpen("FTP_Session" , INTERNET_OPEN_TYPE_DIRECT, "", "", 0); if(! m_hndInet){ m_lngError = GetLastError(); return FALSE; } if(! m_hndInet) m_status_bar.SetWindowText("IntenetOpen fails!"); if(! strlen(url)){ m_lngError = -1000000001L; m_status_bar.SetWindowText("URL fails!"); return FALSE; } DWORD ret(0); m_hndFTP = InternetConnect( m_hndInet, url , INTERNET_DEFAULT_FTP_PORT , usr , psw , INTERNET_SERVICE_FTP, 0, (DWORD)&ret ); if(! m_hndFTP){ m_lngError = GetLastError(); m_status_bar.SetWindowText("FtpConnection fails!"); return FALSE; } else m_status_bar.SetWindowText("FtpConnection succesfully opened."); bool rd = FtpSetCurrentDirectory(m_hndFTP, dir); if(!rd){ m_lngError = GetLastError(); m_status_bar.SetWindowText("Directory set fails!"); return FALSE; } BOOL r = FtpGetFile(m_hndFTP, src, dst , false, FILE_ATTRIBUTE_NORMAL , FTP_TRANSFER_TYPE_BINARY, (DWORD)&ret ); if(! r){ m_lngError = GetLastError(); m_status_bar.SetWindowText("Download file fails!"); return FALSE; } if(m_hndFTP) InternetCloseHandle(m_hndFTP); if(m_hndInet)InternetCloseHandle(m_hndInet); return TRUE; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 13:29 |
|
||
|
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
|
|||
|---|---|---|---|
|
#18+
Для кого тэг SRC придумали ? И еще: когда копируешь из среды сюда, включай русскую раскладку Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 13:33 |
|
||
|
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
|
|||
|---|---|---|---|
|
#18+
Вообще-то для определения доли от ресурсов процессора, которую может отхватить процесс, применяется SetPriorityClass, хотя, конечно, он работает как процент по процессорному времени, а не по совокупной мощности. Насчет памяти и прочего: для любителей экспериментов - CPU Stress из Resource Kit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33314827&tid=2032635]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 424ms |

| 0 / 0 |
