|
EpicYeti wrote: How can I programmatically get the group(s) that the current user(the user account the applications is running on) is in?
NetUserGetGroups() comes to mind. If you want local groups, use NetUserGetLocalGroups() .
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
|
|
Hi all,
I have a loop in my program, that is waiting for a client to connect via TCP/IP for example:
But the thing is, the application uses the cpu to the max (waiting for a client(s)).
<br />
printf("Waiting for client (press any key to abort)...\n");<br />
while(1)<br />
{<br />
if(kbhit())<br />
{<br />
exit(1);<br />
break;<br />
}<br />
....
}<br />
My question is, is there another way of running a loop so that it will use less cpu uasge?
Thanx in advance
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
Yeah, put Sleep(500) or something in somewhere, so it loops, takes a little rest, loops again, takes a little rest... and so on
|
|
|
|
|
Thank you for the help, I'll try it...
Regards
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
As a side note, using Sleep calls generally indicates a poor design and should be avoided.
What you really want is to receive an event when a client tries to connect. In which case, you would use one of the WaitForXXX methods (e.g. WaitForSingleObject, WaitForMultipleObjects).
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Hi Zac,
Thank you for the reply, I'll check those two methods out (WaitForSingleObject, WaitForMultipleObjects).
With these methods, can I still put all my code in the loop that one of these methods creates for example:
<br />
WaitForSingleObject(hHandle,INFINITE)<br />
{<br />
....
}<br />
Regards
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
« Programm3r » wrote: With these methods, can I still put all my code in the loop that one of these methods creates for example:
WaitForSingleObject(hHandle,INFINITE)
{
.... // rest of all the code to execute then a client(s) connects
}
It would depend on what you were doing (i.e. if you were waiting for multiple clients to connect before moving on, or were simply spawning a thread for each connection, yes).
As a rule of thumb, try to avoid using INFINITE as your timeout value. The reasoning is simple: if the event never occurs, the thread you are in is deadlocked. Generally, choose an appropriate timeout value and check the return value of WaitForXXX to see if it returned the timeout value (OBJECT_TIMEOUT if memory serves).
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
|
You can pass as many handles as you want (and as resources call allow for) to the WaitForMultipleObjects method. You can set the flag to either wait for 1 or more, or wait for all before the function returns, depending on what you want (though, I suspect with many objects, you will want to know if any 1 of them has triggered since the liklihood of all of them triggering isn't very high).
You should also note that with network communications (which is what I think you are using it for?) you only really need 1 HANDLE (just an event saying that an incoming connection is being requested). When you handle that event (presumably by spawning a thread to handle the connection), you can reset the event to non-signaled state and resume waiting for connections.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
What about
printf("Waiting for client (press any key to abort)...\n");<br />
getch();<br />
exit(1);<br />
break;<br />
}<br />
....
}
|
|
|
|
|
First of all, thank you for your reply,
This might sound stupid, but the example you provided, performs the same action as the kbhit()??? or and I missing something??
Regards
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
« Programm3r » wrote: but the example you provided, performs the same action as the kbhit()???
Yes except it waits for a key press consuming no noticeable CPU time.
|
|
|
|
|
Thanks Mark ... I understand ....
I'll try it...
Regards
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
« Programm3r » wrote: My question is, is there another way of running...so that it will use less cpu uasge?
Have you considered completion ports or events?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Thanx for the reply David...
Thought about it, but I have put so much work into this project, I think it would kill me to do it over (that is if the "..completion ports or events?.." requires major Surgery to my app )
Regards
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
David, just between you and me .... the completion ports code / functions looks very difficult ... Got this sample code from Windows Sockets 2.0 Write Scalable Winsock Apps Using Completion Ports .... and I didn't understand a dame thing lol .... But thanks for the input, I sure that I can learn something out of this....
Regards
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
I want to get data from edit control in thread function.
My code below
UINT Thread1(LPVOID pParam)
{
char buffer[10];
int wordnum;
CTestDlg *m_dlg = (CTestDlg*)pParam;
wordnum = m_dlg->m_cedit.GetLine(0,buffer);//
*(buffer+wordnum)=0;
m_dlg->m_edit = buffer;
TRACE(m_dlg->m_edit);
return TRUE;
}
after this line
wordnum = m_dlg->m_cedit.GetLine(0,buffer);
buffer will become empty.
Anybody know how to solve this problem.
|
|
|
|
|
As said previously: it is very bad to mix GUI functionalities inside another thread. Why don't you simply save the string contained in your edit control in a variable before starting the thread ?
And don't pass your dialog through the thread, this is also very bad ! You should separate your GUI from your processing (I suppose you started a thread so that you can make some kind of processing, no ?).
|
|
|
|
|
According to documentation, the first word of the buffer should contain its size.
I would suggest using of the second variant of GetLine function, with three arguments:
wordnum = m_dlg->m_cedit.GetLine(0, buffer, 10);
I hope this helps. Note that not all of functions can be used in different threads.
|
|
|
|
|
|
Hi,
I have an activex developed with MFC that now needs to load a managed
assembly and
I want to publish the activex in a cab with all the dlls.
The only way I set it to work was adding a /manifestdependency in the
activex for the assembly and copying it to the IE directory.
Nevertheless, the assembly must also be in the activex directory for
registration. My purpose is to only have this copy of the assembly in
the activex directory.
I tried to change the lpAssemblyDirectory using Activation Context with
no luck.
I also tried to load the assembly with the full path, which gave no
error, but when the managed objects are created it is performed another
load of the assembly in the IE directory (I saw the binding logs).
I also tried to sign the assembly but the activex registration fails
after including the publicKeyToken in manifestdependency.
Any suggestion?
Thanks a lot...
Sandra
|
|
|
|
|
Hi All,
I derived a class from CButton and I'm creating pointers with style BS_OWNERDRAW. This works fine if i give style as WS_CHILD|WS_VISIBLE|BS_OWNERDRAW.
But now i want to custom draw my Radio Button, i giving style as WS_CHILD|WS_VISIBLE|BS_OWNERDRAW|BS_AUTORADIOBUTTON.
But my DrawItem method is not getting called...if remove the BS_AUTORADIOBUTTON style my DrawItem method is called..
Why is this happing?... How can i custom draw my button as radio button..
Thanx
Do your Duty and Don't expect the Result
|
|
|
|
|
http://msdn2.microsoft.com/en-us/library/ms673347.aspx[^]
[quote]
BS_OWNERDRAW
Creates an owner-drawn button. The owner window receives a WM_DRAWITEM message when a visual aspect of the button has changed. Do not combine the BS_OWNERDRAW style with any other button styles.
[/quote]
|
|
|
|