|
Alinuxcs wrote: if any one know solution in java it'll be great
if you know how to access registry through JAVA, then key location is
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and you
|
|
|
|
|
Sir
the program that i want to remve is not in this location
i could found it only in msconfig
but its key in registry cant find it in this location
neither local machine or current user
thank u any way
|
|
|
|
|
Is there anybody out there that has managed to get this counter to work?
I am trying to expose an average timer from my application,
but feeding exactly the same inputs into the Win32 API
and the .Net framework yields two different results,
performance monitor reports the fixed value of 1200 for the Win32 logic
performance monitor reports the correct average time per operation
for the .Net framework logic
Into the Average Timer I am feeding the elapsed time
from the difference of two calls to QueryPerformanceCounter
Into the Average Base I am feeding the number of operations performed
(which is typically 1)
I have found references on the net where other people have encountered this problem - but no solution
I would be VERY grateful for any guidance...
Regards,
Martin...
-- modified at 18:35 Monday 1st January, 2007
|
|
|
|
|
I'm generating an animation on the screen and the screen saver kicks in since there is no keyboard/mouse interaction from the user.
Is there any MFC/Win32 to reset the screen saver timer ? Worst comes to worse I might try a SendMessage() with WM_COMMAND/BN_CLICKED periodically to simulate user interaction but there must be some more elegant solution.
Thanks for your input
Alex
asta la vista baby
|
|
|
|
|
You could try using the SystemParametersInfo() function with the SPI_SETSCREENSAVEACTIVE action.
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
Call SetThreadExecutionState(ES_DISPLAY_REQUIRED) to tell the system that you're using the display.
|
|
|
|
|
From MSDN[^]:
[quote]
This function does not stop the screen saver from executing either.
[/quote]
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
Those docs need some cleanup, since they also say:Multimedia applications, such as video players and presentation applications, must use ES_DISPLAY_REQUIRED when they display video for long periods of time without user input.
|
|
|
|
|
helo all
i wrote a list like class , i tested it with int type and it works but now i want to make it a template.
when i change it to template i got :
Error 4 error LNK2019: unresolved external symbol "public: __thiscall vector_eu<int>::vector_eu<int>(void)" (??0?$vector_eu@H@@QAE@XZ) referenced in function _wmain
from all the functions i declared outside the class.
i tried to put all the code in a singal file and it works fine, but i don't want this .
i want to have the class declarations in a header file the functions in a CPP file so if i want to use the list later all i have to do is to includ the header file and add the CPP file into my project.
here is the code :
<br />
#include <iostream><br />
<br />
using namespace std;<br />
<br />
template <typename tip><br />
class element <br />
{public:<br />
tip val;<br />
int initializat; element<tip>* point_front;<br />
element<tip>* point_back;<br />
<br />
};<br />
<br />
<br />
template <typename tip><br />
class vector_eu<br />
{<br />
public:<br />
vector_eu();
int push_bak(tip);
int insert(tip,int);
int erace(int);
int erace(int,int);
int clear(void);
int get(int); <br />
<br />
private:<br />
element<tip>* primul_element;<br />
int nr_de_elemente;<br />
element<tip>* ultimul_element;<br />
<br />
element<tip>* get_addres(int);<br />
<br />
<br />
};<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
#include "stdafx.h"<br />
#include <iostream><br />
#include <string><br />
#include "define element.h"<br />
using namespace std;<br />
<br />
void error(string s)<br />
{<br />
cout<<s<<endl;<br />
}<br />
<br />
<br />
template <typename tip><br />
inline <br />
vector_eu<tip>::vector_eu()<br />
{<br />
this->nr_de_elemente=0;<br />
this->primul_element=new element<tip>;
this->primul_element->initializat=0; <br />
this->primul_element->point_back=0;
this->primul_element->point_front=0;
this->ultimul_element=this->primul_element; <br />
}<br />
<br />
<br />
<br />
template <typename tip><br />
inline<br />
int vector_eu<tip>::push_bak(tip val)<br />
{<br />
if((this->nr_de_elemente)==0)<br />
{<br />
(this->primul_element)->initializat=1;<br />
(this->primul_element)->val=val;<br />
++(this->nr_de_elemente);<br />
return 1;<br />
}<br />
else<br />
{<br />
element<tip> * temp=new element;<br />
temp->initializat=1;<br />
temp->val=val;<br />
temp->point_front=0;<br />
temp->point_back=(this->ultimul_element);<br />
(this->ultimul_element)->point_front=temp;<br />
(this->ultimul_element)=temp;<br />
++(this->nr_de_elemente);<br />
return 1;<br />
}<br />
}<br />
<br />
<br />
<br />
template <typename tip><br />
inline<br />
element<tip>* vector_eu<tip>::get_addres(int n) {<br />
if (this->nr_de_elemente==0)<br />
{<br />
error("nu exista elemente");<br />
return 0;<br />
}<br />
else<br />
{ if(n<this->nr_de_elemente)<br />
{<br />
if(n==0) return this->primul_element;<br />
else<br />
{<br />
if(n<0){ error("iterator<0");return 0;}<br />
else<br />
{<br />
element<tip>*temp=this->primul_element; <br />
while(n>0)<br />
{<br />
temp=temp->point_front;<br />
--n;<br />
}<br />
return temp;<br />
}<br />
}<br />
}<br />
else <br />
{<br />
error("iterator>nr_de_elemente");<br />
}<br />
}<br />
<br />
<br />
}<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
template <typename tip><br />
inline<br />
int vector_eu<tip>::get(int n)<br />
{<br />
if(this->nr_de_elemente>n)<br />
{<br />
if(n>-1)<br />
{<br />
element<tip> * temp =get_addres(n);<br />
return temp->val;<br />
}<br />
else {<br />
error("iterator<0");<br />
return 0;<br />
}<br />
}<br />
else {<br />
error("iterator>nr_de_elemente");<br />
return 0;<br />
}<br />
}<br />
<br />
<br />
<br />
<br />
template <typename tip><br />
inline<br />
int vector_eu<tip>::clear(void) <br />
{<br />
if(this->nr_de_elemente!=0)<br />
{<br />
if(this->nr_de_elemente>0)<br />
{<br />
element<tip>* temp=this->ultimul_element;<br />
while(this->nr_de_elemente>1)<br />
{<br />
temp=temp->point_back;<br />
delete (temp->point_front);<br />
--(this->nr_de_elemente);<br />
}<br />
temp->point_front=0;<br />
temp->initializat=0;<br />
temp->val=0;<br />
(this->ultimul_element)=(this->primul_element);<br />
(this->nr_de_elemente)=0;<br />
return 1;<br />
}<br />
else {error("nr_de_elemente<0");return 0;}<br />
}<br />
else<br />
return 1;<br />
}<br />
<br />
<br />
<br />
template <typename tip><br />
inline<br />
int vector_eu<tip>::erace(int n) <br />
{<br />
if(n<this->nr_de_elemente)<br />
{<br />
if(n>-1)<br />
{ <br />
if(n==0)<br />
{ <br />
if(this->nr_de_elemente==1)<br />
{<br />
this->clear();<br />
}<br />
else<br />
{<br />
element<tip> *temp=this->primul_element;<br />
this->primul_element=(this->primul_element)->point_front;<br />
(this->primul_element)->point_back=0;<br />
delete temp;<br />
--(this->nr_de_elemente);<br />
return 1;<br />
}<br />
}<br />
else{<br />
if((n+1)==this->nr_de_elemente)<br />
{<br />
element<tip> * temp=this->ultimul_element;<br />
((this->ultimul_element)->point_back)->point_front=0;<br />
(this->ultimul_element)=(this->ultimul_element)->point_back;<br />
delete temp;<br />
--(this->nr_de_elemente);<br />
return 1;<br />
}<br />
else<br />
{<br />
element<tip> * temp=get_addres(n);<br />
(temp->point_back)->point_front=temp->point_front;<br />
(temp->point_front)->point_back=temp->point_back;<br />
delete temp;<br />
--(this->nr_de_elemente);<br />
return 1;<br />
}<br />
}<br />
}<br />
else error("iterator<0");<br />
<br />
}<br />
else error("iterator>nr_de_elemente");<br />
<br />
return 0;<br />
}<br />
<br />
<br />
<br />
template <typename tip><br />
inline<br />
int vector_eu<tip>::erace(int n, int r) { <br />
if(n<0)<br />
{<br />
error("iterator poz<0");<br />
return 0;<br />
}<br />
else<br />
if(r<0) <br />
{<br />
error("iterator lungime<0");<br />
return 0;<br />
}<br />
else<br />
if(r==0)<br />
{<br />
error("iterator lungime = 0");<br />
}<br />
else<br />
if((n+r)>(this->nr_de_elemente))<br />
{<br />
error("depaseste dimensiunea");<br />
return 0;<br />
}<br />
else<br />
{<br />
if(r==1) <br />
{<br />
erace(n);<br />
return 1;<br />
}<br />
else<br />
if(n==0)<br />
{<br />
if(r==(this->nr_de_elemente))<br />
{<br />
this->clear();<br />
return 1;<br />
}<br />
else<br />
{ <br />
element<tip> * temp=(this->primul_element);<br />
for(int i=0;i<r;++i)<br />
{<br />
temp=(temp->point_front);<br />
delete (temp->point_back); <br />
<br />
}<br />
(this->primul_element)=temp;<br />
(this->primul_element)->point_back=0;<br />
this->nr_de_elemente-=r;<br />
return 1;<br />
}<br />
}<br />
else<br />
{<br />
if((n+r)==(this->nr_de_elemente))<br />
{<br />
element<tip> *temp=get_addres(n);<br />
(this->ultimul_element)=temp->point_back;<br />
(this->ultimul_element)->point_front=0;<br />
for(int i=1;i<r;++i)<br />
{<br />
temp=temp->point_front;<br />
delete temp->point_back;<br />
}<br />
delete temp;<br />
this->nr_de_elemente-=r;<br />
return 1;<br />
}<br />
else<br />
{<br />
element<tip> *temp=get_addres(n);<br />
element<tip> *temp_2=(get_addres(n-1));<br />
element<tip> *temp_3=get_addres(n+r);<br />
temp_2->point_front=temp_3;<br />
temp_3->point_back=temp_2;<br />
for(int i=1;i<r;++i)<br />
{<br />
temp=temp->point_front;<br />
delete temp->point_back;<br />
}<br />
delete temp;<br />
this->nr_de_elemente-=r;<br />
return 1;<br />
}<br />
<br />
}<br />
}<br />
}<br />
<br />
<br />
template <typename tip><br />
inline<br />
int vector_eu<tip>::insert(tip val, int n) <br />
{ <br />
if((n==0)&&(this->nr_de_elemente==0))<br />
this->push_bak(val);<br />
else<br />
if(n>this->nr_de_elemente)<br />
{<br />
error("iterator>nr_de_elemente");<br />
return 0;<br />
}<br />
else<br />
if(n<0)<br />
{<br />
error("iterator<0");<br />
return 0;<br />
}<br />
else<br />
if(n==this->nr_de_elemente)<br />
{<br />
this->push_bak(val);<br />
<br />
return 1;<br />
}<br />
else<br />
if(n==0)<br />
{<br />
element<tip> * temp=new element<tip>();<br />
temp->initializat=1;<br />
temp->point_back=0;<br />
temp->point_front=this->primul_element;<br />
(temp->val)=val;<br />
(this->primul_element)->point_back=temp;<br />
this->primul_element=temp;<br />
++(this->nr_de_elemente);<br />
return 1;<br />
}<br />
else<br />
{<br />
element<tip> * temp=get_addres(n-1);<br />
element<tip> * new_element= new element<tip>();<br />
<br />
new_element->initializat=1;<br />
new_element->val=val;<br />
<br />
new_element->point_front=temp->point_front;<br />
(temp->point_front)->point_back=new_element;<br />
temp->point_front=new_element;<br />
new_element->point_back=temp;<br />
++(this->nr_de_elemente);<br />
return 1;<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
#include "stdafx.h"<br />
#include "define element.h"<br />
#include <iostream><br />
<br />
using namespace std;<br />
<br />
int _tmain(int argc, _TCHAR* argv[])<br />
{<br />
int a,b,c;<br />
<br />
vector_eu<int> e;<br />
while(1)<br />
{ <br />
<br />
cout<<endl<<endl;<br />
cout<<"1. push_bak"<<endl; <br />
cout<<"2. insert"<<endl;<br />
cout<<"3.clear"<<endl;<br />
cout<<"4.get"<<endl;<br />
cout<<"5.erace(int)"<<endl;<br />
cout<<"6.erace(int,int)"<<endl;<br />
cin>>a;<br />
if(a==0) break;<br />
switch (a)<br />
{<br />
case 1:<br />
cout<<" val= ";<br />
cin>>b;<br />
<br />
e.push_bak(b);<br />
break;<br />
case 2:<br />
cout<<"val= ";<br />
cin>>b;<br />
cout<<" poz= ";<br />
cin>>c;<br />
e.insert(b,c);<br />
break;<br />
case 3:<br />
e.clear();<br />
break;<br />
case 4:<br />
cout<<"poz= ";<br />
cin>>b;<br />
cout<<"e["<<b<<"]= "<<e.get(b);<br />
break;<br />
case 5:<br />
cout<<"poz= ";<br />
cin>>b;<br />
e.erace(b);<br />
break;<br />
case 6:<br />
cout<<"poz= ";<br />
cin>>b;<br />
cout<<"lungme= ";<br />
cin>>c;<br />
e.erace(b,c);<br />
break;<br />
<br />
}<br />
<br />
}<br />
<br />
std::system("pause");<br />
return 0;<br />
}<br />
<br />
|
|
|
|
|
Because of how templates work all the code for template classes have to be in the *.h header files. You can not split them between header and *.cpp source files.
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
posting a kilometer of code (not even respecting the posting guidelines) will not help as i doubt one will take time to analyse your whole code.
you have to do the tracking yourself first, and then ask about a specific point, providing only the piece of code around where the problem comes from...
|
|
|
|
|
Wat do u expect from us sir,
To rewrite the whole for u
Man can acquire accomplishments or he can become an animal, whichever he wants. God makes the animals, man makes himself.
G. C. Lichtenberg (1742-99), German physicist, philosopher.
SH UVIK
|
|
|
|
|
sorry!!!!!!
i'm not expecting that u rewrite my code.
i'll try to falow toxcct's advice.
|
|
|
|
|
dear all
iam working on a finger preassure sensing by a touchpad so if you can help me i need to know how can i take yhe preassure from it by visual c++
thanx allot
ahmad al-omar
|
|
|
|
|
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
If u can then go through the C libraries by SUSE 10.0 wherein they ve such options in there drivers.
If u can simulate the same in VC++
I'm not knowing anymore
Man can acquire accomplishments or he can become an animal, whichever he wants. God makes the animals, man makes himself.
G. C. Lichtenberg (1742-99), German physicist, philosopher.
SH UVIK
|
|
|
|
|
if a class is to overload both the prefix and postfix operators, the sigs usually look like this:
const Counter& operator++ (); // prefix
const Counter operator++ (int); // postfix
my question is why is the prefix returning a reference while the latter returns by value?
thank you.
I am a SysAdmin, I battle my own daemons.
|
|
|
|
|
|
Hi,
I'm writing a server application using UDP and the I/O Completion port. I red some articles and i know the things about it.
My application scans a list of servers, requests some information, unpacks the information and stores the information, this is a process in loop. However, after a while i get the 10055 Error or better said WSANOBUFS. Now i red that that means that there cant be made any more locks ( source[^] ) I cant quit seem to find where the error takes place, there might be a sort of loop in locking where the the unlock never hits, but i dont know where that would be then. Is there any way to detect a possible deadlock? or do you know something else that might be wrong? Thanks already
-Koen
|
|
|
|
|
Where are you getting the WSAENOBUFS error? On a send, receive, connect?
If on a send, have you disabled send buffering for the socket?
Are you using IOCP for sends, recvs, connects? All overlapped operations?
|
|
|
|
|
int res = WSARecvFrom(m_sSocket, &m_wsaBuf, 1, reinterpret_cast<LPDWORD>(&buflen), &temp, reinterpret_cast<sockaddr*>(&m_objAddress), &sockaddr_len, &m_objOverlapped, NULL);
There i get the error 10055, Sending goes just fine.
Since im using UDP im not connecting. Next to that, i dont use overlapped operations everywhere, i got a mysql class wich just sends a status update every 10 seconds, and a remote manager class wich uses TCP. both the mysql and the rmanager are using normal winsock so without overlapped operations.
<br />
m_sSocket = socket(AF_INET, SOCK_DGRAM, 0);<br />
m_objAddress.sin_family = AF_INET;<br />
m_objLocalAddress.sin_family = AF_INET; <br />
m_objLocalAddress.sin_addr.s_addr = htonl(INADDR_ANY);<br />
m_objLocalAddress.sin_port = 0; <br />
m_hIOCP = hIOCP;<br />
if (bind(m_sSocket, reinterpret_cast<sockaddr*>(&m_objLocalAddress), sizeof(m_objLocalAddress))==SOCKET_ERROR){<br />
TRACE("Error binding localaddress with the socket, Error: %i\n", WSAGetLastError());<br />
}<br />
if (CreateIoCompletionPort(reinterpret_cast<HANDLE>(m_sSocket), hIOCP, reinterpret_cast<DWORD>(const_cast<CVirtualSession*>(this)), 0)==NULL){
TRACE("Error binding Session to the main object, Error: %i\n", WSAGetLastError());<br />
return;<br />
}
Here i initialize is UDP session, there are like 400 udp virtual sessions continiously sending and recieving data. the first minut it goes all well, but after that, every sessions returns the error 10055 on recieving
|
|
|
|
|
This may or may not be the problem, but based on what I've seen it's the first thing that comes
to mind. I hope this helps a bit...
Unless you always keep enough receive buffers queued in your IOCP then the socket can receive
datagrams faster than you are pulling them out of its buffer.
If the socket is not "connected" (for UDP that just means all datagrams will be ignored except
from the "connected" address) then the socket's recv buffer gets filled with every UDP datagram it
sees on the network. You need to pull them out fast enough to keep enough buffer space for
receives.
One option is to use a connected socket to receive UDP datagrams on. The drawback is you'd need
400 sockets, or one for every session as you described.
Another option is to always have a pool of overlapped WSARecvFrom() calls pushed on the IOCP
stack so there will always be one available when a datagram is received. You could use the
FD_READ notification to help notify a thread that data has been received on the socket and make
sure there's a pending overlapped receive operation ready to accept the data.
Also make sure your IOCP is properly "tuned" with the right amount of threads in the pool to
most efficiently handle all the received datagrams.
These articles may be helpful too (you may have seen them already - I keep them bookmarked for
any IOCP troubles I encounter )...
Windows Sockets 2.0: Write Scalable Winsock Apps Using Completion Ports[^]
INFO: Design Issues When Using IOCP in a Winsock Server[^]
|
|
|
|
|
thanks, i havent solved the problem yet however i didnt try your possible solutions so
I'll working on it as soon as my job ends. i'll tell you how it goes as soon as there's some result. thanks again
|
|
|
|
|
If the socket is not "connected" (for UDP that just means all datagrams will be ignored except
from the "connected" address) then the socket's recv buffer gets filled with every UDP datagram it
sees on the network. You need to pull them out fast enough to keep enough buffer space for
receives.
I tried some solutions but i cant seem to get them working. Its probably my lack of experiance but well,
The fundamental code:
<br />
while (1){ <br />
BOOL bIORet = GetQueuedCompletionStatus (
pThis->m_hIOCompiltionPort,<br />
&dwIoSize,<br />
reinterpret_cast<LPDWORD>(pThis),<br />
&ptrOverlapped, INFINITE);<br />
if (!bIORet){<br />
TRACE("Winsock error code: %i\n", GetLastError());<br />
Gameye::Library::Thread::CMPThread::Sleep(0);<br />
}<br />
else{<br />
ptrSession = static_cast<CVirtualSession*>(ptrOverlapped->Pointer);<br />
CAbstractServerClass* ptrGameClass = (*pThis->m_ptrGameManager)[ptrSession->getNDServer()->GameID];<br />
if (ptrGameClass == NULL){<br />
TRACE("Game is unknown, probably removed\n");<br />
}<br />
else{<br />
objToolset.Session = ptrSession;<br />
switch(ptrSession->getTask()){<br />
case RequestSend:
if (WSASendTo(sSocket, <br />
ptrSession->getWSABuffer(),<br />
1,<br />
reinterpret_cast<LPDWORD>(&ptrSession->getWSABuffer()->len),<br />
0,reinterpret_cast<sockaddr*>(ptrSession->getAddress()),<br />
sizeof(sockaddr_in),<br />
ptrSession->getOverlapped(), NULL) == -1)<br />
{<br />
int iErrorCode = WSAGetLastError();<br />
if (iErrorCode != 997){
TRACE("Sending failed because: %i\n", WSAGetLastError());<br />
break;<br />
}<br />
}<br />
ptrSession->setStatus(AfterSend);<br />
break;<br />
case RequestRecieve:
if (WSARecvFrom(sSocket, <br />
ptrSession->getWSABuffer(),<br />
1,<br />
reinterpret_cast<LPDWORD>(&ptrSession->getWSABuffer()->len),<br />
&iTemp,reinterpret_cast<sockaddr*>(ptrSession->getAddress()),<br />
&iSockAddrSize,<br />
ptrSession->getOverlapped(), NULL) == -1)<br />
{<br />
int iErrorCode = WSAGetLastError();<br />
if (iErrorCode != 997){
TRACE("Recieving failed because: %i\n", WSAGetLastError());<br />
ptrSession->setStatus(AfterRecieve);<br />
}<br />
}<br />
ptrSession->setStatus(AfterRecieve);<br />
break; <br />
case AfterSend:
ptrSession->incSendBytes(dwIoSize);<br />
ptrGameClass->RetrieveServerInfo(ptrSession->getNDServer(), &objToolset);<br />
break;<br />
case AfterRecieve:
ptrSession->incRecvBytes(dwIoSize);<br />
if (ptrGameClass->UnpackServerInfo(ptrSession->getNDServer(), &objToolset) == 0){
ptrSession->Finish();<br />
}<br />
break;<br />
case Finishing:<br />
pThis->m_objSql.AddGame(ptrSession->getNDServer());<br />
break;<br />
default:<br />
break;
}<br />
}<br />
}
Most calls should be clear. the events i call are simpel functions, they should return in a inch of a sec, next to that, i can have 10 workerthreads running and still i get the same error. some sessions come out alive but most of them just gives the known error on recieve. You also see that after every send, a call to WSARecvFrom is been made. its not directly but again with the inch of a second.
Also, with 10 sessions, 2/3 sessions returns the error on recieve the rest just works fine. with 400 sessions, a few return with the error and a few dont. that indicates that the recieve buffer aint full right?
|
|
|
|
|
You get a completion packet indicating "RequestRecieve" and in response you call WSARecvFrom()
before calling ptrSession->setStatus(AfterRecieve);
Chances are pretty good that another thread has already processed the completion of the
WSARecvFrom() call before you can even check the error code!
So, you'll get ANOTHER RequestRecieve before you have a chance to set the session status to
AfterRecieve.
Make sense?
In other words, you probably want to call ptrSession->setStatus(AfterRecieve) BEFORE you call
WSARecvFrom().
Also, use WSA_IO_PENDING instead of 997 so I can read your code haha I don't have all the WSAE
codes memorized yet
|
|
|
|
|