|
Hi
I have a producer thread of the following form:
while (1)
{
g_cs.Lock();
if (GetPkt()) g_PktEvent.SetEvent();
while (index==FULL)
{
g_cs.Unlock();
WaitForSingleObject(g_BufferEmptyEvent,INFINITE);
break;
}
g_cs.Unlock();
}
and a consumer thread as follows:
while (1)
{
g_cs.Lock();
if (index>0) g_BufferEmptyEvent.SetEvent();
while (index==0)
{
g_cs.Unlock();
WaitForSingleObject(g_PktEvent,INFINITE);
break;
}
g_cs.Unlock();
}
When I run the program, the threads block after some time (the buffer remains empty). The producer thread does not produce any pkt to place in the buffer.
Can anyone please help me find out where the bug is?
Thanks a lot
|
|
|
|
|
There are numerous problems with your code:
First, in your producer thread, there's no reason for the second while loop. Since you never loop, you call break at the end of it no matter what. This can be achieved with an if statement instead.
Second, in the case of index==FULL, then you will call Unlock() twice while only calling Lock() once. That will cause all kinds of problems.
The same applies for your consumer thread.
But the real problem here is likely that you are in what's called a deadlock, or race condition. Your consumer thread is waiting in WaitForSingleObject for a packet ready event, and your producer is waiting for a buffer empty event. Since both threads are waiting at the same time, they wait indefinately.
|
|
|
|
|
Thanks for replying.
I actually changed my code so that I'm now using an if statement instead of while. I also modified the code such that I only call Unlock() once. But I'm still having the same problem.
Any suggestions?
Thanks again
|
|
|
|
|
Yes, I already told you in my first response.
You're in a deadlock, you need to make sure you never get into a deadlock by changing your algorithm so that you are never causing two waits to be waiting on each other.
|
|
|
|
|
Could anyone tell me how to hibernate machine from my program?
|
|
|
|
|
I'm experimenting the usage of bitmaps. I started by downloading an example project from codeproject and I'm trying to modify it:
http://www.codeproject.com/miscctrl/oscope.asp
I would like the oscilloscope to plot the points starting from the left side of the screen, ending at the right side.
At the moment, the bitmap points are plotted from right to left (I would like it to be the opposite). I already added a multiple graphs' support to the program, but can't solve this simple direction problem.
Can someone give me a hint on how to fix the situation, please?
|
|
|
|
|
Desktop also a window in VC++. Can we write a program to capture it, and can we change the caption of start button.
If so please tell me the procedure.
Thanking you
|
|
|
|
|
It's possible, but this requires a lot of work, since the start button is an owner drawn button. You would need to subclass the button, then do your own painting.
What you would need to do is enumerate the desktop windows child windows looking for the Shell_TrayWnd, then enumerate the Shell_TrayWnd's child windows looking for a window with the button class. Once you get that HWND, can then sublcass it into a CButton using CButton::Attach
|
|
|
|
|
If you would like an example go to: http://homepage1.nifty.com/kazubon/tclock/indexe.html
|
|
|
|
|
Can we create voice recognition software in VC++. If so please tell me the procidures.
Thanking You
|
|
|
|
|
You can find some ActiveX controls at www.activex.com search for "voice recognition" or "speech recognition". Also Dragon Sys (makers of the famous Dragon Naturally Speaking) has a developer's kit, go to Dragon Developer's Site but expect to pay big licencing fees...
|
|
|
|
|
In windows 95/NT within control panel, we can find an icon fonts. If we open it then we can see the list of fon'ts.
Now i want to develop own font file, to be used in my native language. Is it possible in VC++.
If so please, tellme the procedures
|
|
|
|
|
You need a Truetype font editor, search for pages like www.microsoft.com/OpenType
|
|
|
|
|
Hi
I have programmed a tool. In this tool i have passwords and other strings in the code. If i compile it, make an *.exe -file, i can easy read this strings, if i open it in the notepad. How can i encrypt the code during compileing ?
I don't like to encrypt all the strings manual and i like to have the original strings in the code !
Thank's
|
|
|
|
|
storing passwords in code is always a bad idea. - even if you encrypt them - if they have to be decrypted before use then it will not stop a cracker/hacker from getting the passwords it will only slow them down and not by much.
Holy Handgrenade of Antioch instructions
|
|
|
|
|
I agree with the other poster in saying that it is a very bad idea to hardcode passwords into your code, or to store actual passwords in any form.
It is MUCH better to save a crytological hash of the password, such as an MD5 hash (do a web search for "Request for Comments: 1321"). A crypto hash has the property that given a plaintext string, it's easy to compute a hash code. BUT given the hash code, it's almost impossible to get back to the plan text. It's perfectly safe to store hash values in an ini file or the registry, or even to just post it on a billboard on the Motorway.
What you do is get the password, run it through a hash algorithm, and compare the password's hash value with the one you saved. If they are equal, then then the user has entered the correct passsword.
Jim
|
|
|
|
|
I've written and submitted a short article with a simple MD5 class to illustrate a safe way to handle passwords in C++. Chris hasn't posted it yet, but I'm sure it'll pop up soon.
Jim
|
|
|
|
|
You can't.
About the only thing you could do is use a file compressing linker, like Shrinker, but that's not foolproof. It's pretty easy to get around that.
|
|
|
|
|
One-way encryption is best like crypt() you store the value of the password encrypted then when the user enters a password it encrypts their password and matches it against the already encrypted pass (this way they can't debug it and see what pass it is being matched against)
Anyhow, if you are looking for a simple easy answer just to hide strings from hex editors you can use the ascii values to build the string like such:
char var[3];
sprintf(var, "%c%c%c", 97, 98, 99);
var would now be "abc" and a hex editor should not be able to see it.
|
|
|
|
|
What basic source code do I need to be able to connect over a LAN Line and chat to another client on a different terminal on the network.
Cheers! The Homer,
|
|
|
|
|
Have a look at the MFC samples chatter/chatsrvr - they'll get you going on MFC sockets. not the best but not bad for a local LAN setup.
also I think there is some awarenet SDK stuff on this site that might help.
If you want to go the Instant messenger route you could use
MSs Instant Messenger or ICQ - or you could roll your own and use Jabber as the server and make you're own client.
Holy Handgrenade of Antioch instructions
|
|
|
|
|
How can I create a CView child window in a CForm window, including scrolling.
|
|
|
|
|
I have been trying to implement drag and drop in a view. However I would like it to occur when a user clicks on a toolbar button. So far drag and drop only works when implemented/started in a WM_MouseMove or WM_LButtondown message. Any ideas or code examples.
Basically I want to have the drag operation to occur after a user has clicked on the toolbar button and then moves the mouse across the view screen without having to hold down the left mouse button.
|
|
|
|
|
My problem is:
I've got a dialog-based application with a property sheet.
The property sheet contains 2 property pages.
I'd like to invoke a modal dialog box when I press
a button placed on property page 1.
When I declare a member variable named m_MyDialog in CMyDialog and I do a call like m_MyDialog.DoModal();, my system goes to Nirvana.
Can you tell me how I can solve my problem ??
Thank you !
|
|
|
|
|
I got a lot of tips from MSDN and other books on how to debug a ISAPI Extension DLL. Most of them assume IIS is under 3.0 version so that they can use inetinfo.exe -e W3svc to start the IIS service as an stand-alone application. However, when using IIS5.0 and on Windows 2000, what they say is not really the case. MSDN metioned the debug method under the IIS over 4.0 version. It's a very long series steps. Unhopefully, not all the steps are effective. So the result is undoutedly depressing. Is there anyone who once debugged the ISAPI Extension DLL under Windows2000? I'd be grateful if someone can help me out?
|
|
|
|