Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти? / 6 сообщений из 6, страница 1 из 1
10.10.2005, 13:16
    #33314827
Anton M.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?

Кто нибудь задавался таким вопросом? У меня задача - обработка данных, получаемых с СОМ порта. Все сделал, единственное загрузка проца - на 100%. Могу ли я как нибудь регулировать процентное соотношение сводной памяти проца? PS: вся нагрузка ложится на обработчик приема данных с СОМ, вызываемого по таймеру.
...
Рейтинг: 0 / 0
10.10.2005, 13:18
    #33314836
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
память и процессор - разные вещи.

ошибка в 17-й строке, по-любому, показывай код
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
10.10.2005, 13:25
    #33314865
Anton M.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
Карабас Барабаспамять и процессор - разные вещи.

ошибка в 17-й строке, по-любому, показывай код
Posted via ActualForum NNTP Server 1.3

многовато кода получится...
Да и посуди сам, каждую долю секунды на СОМ пррходит сообщение, обработчик срабатывает несколько раз в секунду. Логично что загрузка проца 100%?
...
Рейтинг: 0 / 0
10.10.2005, 13:29
    #33314887
Anton M.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
А на счет кода, без проблем, вот он:

:)

//////////////////////////////////////////
//
// Ïîëó÷åíèå äàííûõ èç ÑÎÌ ïîðòà
//

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;
}
...
Рейтинг: 0 / 0
10.10.2005, 13:33
    #33314904
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
Для кого тэг SRC придумали ? И еще: когда копируешь из среды сюда, включай русскую раскладку
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
12.10.2005, 09:29
    #33318887
rrrrrrrrrr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти?
Вообще-то для определения доли от ресурсов процессора, которую может отхватить процесс, применяется SetPriorityClass, хотя, конечно, он работает как процент по процессорному времени, а не по совокупной мощности. Насчет памяти и прочего: для любителей экспериментов - CPU Stress из Resource Kit
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Загрузка процессора приложением. Возможно ли регулировать используемый объем памяти? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]