|
I don't get it. Why would you want to store a string in an integer? You could only store a pointer to character array, which would be meaningless when read back in?
What's wrong with a good old char[4]?
Michael
Communication is the first step towards enlightenment.
|
|
|
|
|
I don't know. I am writing a 3D application and have the file format. From all the other source, mostly the source for the MD2 file format stores this type of information int an 'integer' variable. I myself do not know why John C uses an int and not char[4] or char[5] if accomadating for the '\0'.
Sam
----
"No special sig just plain old Sam..."
|
|
|
|
|
It's highly dangerous to do this. You are relying on an int being 32 bits, which it isn't necessaryily. What if MS changed int to a 64bit in a future release? you're app would not load data correctly most probably.
Signature space for rent. Apply Within.
|
|
|
|
|
Actually this is a good point. Or, you can typedef or explicitly define an int being 32 bits. But this is something I think John C would have thought of I wonder why he used this as an ID value?!?! I'm puzzled.
Sam
----
"No special sig just plain old Sam..."
|
|
|
|
|
Hi,
I'm trying to add a new string value under an existing registry key. I see the APIs to delete , enum and set a value but I just can't figure out how to add a NEW string value under an EXISTing key.
Please help.
Thanks!
This is what i've tied but it creates a KEY and not a VALUE under "Info"
if(RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
"SOFTWARE\\BFW\\SampleTool\\Info",
0,
KEY_ALL_ACCESS,
&hkey
)==ERROR_SUCCESS)
{
if(RegSetValue(hkey,"Info",REG_SZ,"Test",5)==ERROR_SUCCESS)
I'd like to see Test appear as a REG_SZ under the Info Key.
|
|
|
|
|
|
RegSetValueEx(hkey,"Test",0,REG_SZ, NULL,NULL)
Did the trick.
Thanks.
|
|
|
|
|
Hi,
This will solve your problem.
unsigned long ValueSize = 10; // you can use also sizeof ( long ) or anything you need.
if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\BFW\\SampleTool\\Info , 0, KEY_READ|KEY_SET_VALUE, &hKey) != ERROR_SUCCESS )
{
// error message.
return;
}
RegSetValueEx(hKey,"Info",NULL,REG_SZ,(unsigned char*)5,ValueSize);
Aizik Yair
Software Engineer
|
|
|
|
|
I was wondering anyone can help me out on how best to design the following:
I have a piece of code which is HIGH PRIORITY. This must be ran at a set timing interval (say 20ms- or at least close to it). It will be doind data acquisition and then putting all this in a buffer.
The GUI end will update the screen and variables that the above code retrieves at another rate (say every 1 sec). This thread will read the buffer and then do calc and then maybe graph it.
Now, I was thinking that the first piece of coe should be in a HIGH Priority thread.
Originally, I was thinking that I do a timer that will read the Buffer and also update the screen. However, I was thinking that during the intervals, there may also be lots of idle time, which can be used. I want the program to also data acq and if there is nothing going on (no timer either) to check and read the buffer. I was thinking aboput using the onidle.
Is this the best way to do what I would like? I want to EVEN out the tasks and time spent in the GUI thread without doing it only when the timer is called at certain intervals. Is there an effective way to do this?
Thanks in advance.
|
|
|
|
|
You can never guarantee that your thread will run at an exact interval, or that it will even run. That's preemptive multitasking - the OS can switch away from your thread at any time, when its time slice is up or if a higher-priority thread needs CPU time. If you need exact control over CPU time, Win32 isn't the right OS.
--Mike--
Buy me stuff! (Link fixed now)
Like the Google toolbar? Then check out UltraBar, with more features & customizable search engines!
My really out-of-date homepage
Big fan of Alyson Hannigan and Jamie Salé.
Sonork - 100.10414 AcidHelm
|
|
|
|
|
The best approach would be to have your worker thread sitting at a WaitForSingleObject() with the object being a CEvent or some such. Whenever data was available it would signal the event and the thread would grab the data. The thread function could set a flag to let the GUI know that new data was available. The GUI could check this in OnIdle, however you shouldn't do any lengthing processing there. It could just PostMessage() to the MainFrm telling it to do whataver.
Neville Franks, Author of ED for Windows. www.getsoft.com
|
|
|
|
|
I think I understand what you are asking for, so I'll take a shot at it.
First off, let me ask. Can you use IO Completion ports? If you only have to run on NT,2K+ and what data you are waiting for is socket related this might be the best solution for you. You would basically guarantee that your worker thread only runs when there is data regardless of if it is less than or greater than 20ms.
If that's not an option. You could use 2 worker threads to achieve what you are asking for. The first thread would be a higer prirotity thread using WaitForXXXObject with a set maximum time. It would execute your worker code every XX MS. (Note: as stated before, Windows doesn't guarantee a high level of precision in timing functions.) The second worker thread would be the lowest possible prirotity and would do the same thing the first thread does, except it would use Sleep(0) instead of WaitForXXXObject to release its timeslice before calling your worker code. Obviously, your worker code (not the thread which calls it, the actual code block) might need to be protected against multi-thread access using a CRITICAL_SECTION or whatever.
Just my 2 cents.
Matt Gullett
|
|
|
|
|
I understand what everyone is thinking. Well, Win OS is good enough for my purposes. Why I believe I need a high priority thread first is that I need to call a fucntion to acquire data from a card every so ...
For the most part, I have tried a little of what I thought up an dit works BUT it only reacts when a timer is called to read from the buffer that the high priority thread puts data to. The High priority thread has a sleep call at the moment.
The comment by Matt about the second thread doing a sleep to release timeslices confuses me a bit. What I am getting from it is that the worker high priority thread will be run whenever. Then when the lower priority thread is called (because nothing else happening) it will sleep and call the worker thread func. If there was no this lower priority thread, wouldn't it still work the same way?
In another comment, it was mentioned taht I coul dsend a message from my OnIdle func to my Main program to do the task of reading from the buffer. This sounds good. But I was wondering if it would then end up sending TOO many messages because I thought OnIdle is called often.
Thanks for the comments. Does anyone have any other comments on what I said above? I am really trying to figure out a way to do thing better!
|
|
|
|
|
Grr Ive just about had enough of Visual B*$£%y studio. Okay heres my problem ive written a program that runs buetifully in Debug and i mean buetifully not a single error when runnign it 100's of times etc.
Soon as i switch to release i get it just crashing or errors popping up saying some function failed. Okay one of teh biggest ones is CryptAcquireContext() fails with invalid parameter well hwo the hell can that be when the parameter is valid in debug. All i can think of is something is screwing up the memory where this is loaded has anyone got any ideas.
Peter
P.S Surely if something was screwing this memory area up it would be picked up in debud as an Assert failure?
|
|
|
|
|
Peter Liddle wrote:
well hwo the hell can that be when the parameter is valid in debug.
Two words: uninitialized variables
Check out John Newcomer's article here at CP about debug vs. release problems.
--Mike--
Buy me stuff! (Link fixed now)
Like the Google toolbar? Then check out UltraBar, with more features & customizable search engines!
My really out-of-date homepage
Big fan of Alyson Hannigan and Jamie Salé.
Sonork - 100.10414 AcidHelm
|
|
|
|
|
set your compiler's warning level to 4. this will catch a lot of stuff. (project / settings / C/C++ )
-c
There ain't no second chance
Against the thing with the forty eyes
|
|
|
|
|
you must also call "ZeroMemory" when passing some structs to API,if you do not call this the struct may have invalid data.
Casa.Sapo.pt
|
|
|
|
|
Thats what i thought that it would be unintalised variables but i have checked loads of times and can't find any and no warnign about them are bought up.
Maximaiano whats that about zeromemory i have zeroed all my structs when i initalise them shoudl i be zeroing them somewhere else as well?
Peter
|
|
|
|
|
look at this sample...
in this sample i am changing the text of one header item (CHeaderCtrl)
HDITEM hdi;
ZeroMemory(&hdi, sizeof(hdi)); //if i do not call this it will crash in release (most of the times)
hdi.mask = HDI_TEXT | HDI_FORMAT;
hdi.fmt = HDF_STRING | HDF_CENTER;
hdi.pszText = "Cool String";
m_Header.SetItem(i,&hdi);
why does it crash?
when we call SetItem we are passing all the items in the struct (hdi) not only the ones that we use (hdi.mask,hdi.fmt,hdi.pszText) and because the
the items that we didnt use may have invalid data the control crashes
the zeromemory "cleans" the struct , providing a safe way of sending a struct to a control without invalid data.
Casa.Sapo.pt
|
|
|
|
|
|
|
hello!
In my MDI app, I added a handler for the OnClose message in CDocument, so I can detect if the document has changed and promt for saving; the prompt has a Cancel button that prevents the document from being closed if the user changes his/her mind
My problem is that when the app is closed and a document has not been saved and you press the cancel button the program (obviously) crashes.
So what I want to do is call the OnClose method of all open documents before closing the main window and if one remains open prevent the app from closing. Can someone help me do this? I don't know how to reach the open documents' list from the main window.
thanks a lot!
marcela bovio
|
|
|
|
|
should have done a better search in the forum before asking
http://www.codeproject.com/script/comments/forums.asp?msg=34506&forumid=1647&kw=open+documents#xx34506xx
in case anybody else is interested
marcela bovio
|
|
|
|
|
hi all,
i have a dialog based class name called smp and global function which is callback compare function for sorting ctreectrl::CSortChildrenCB();
how can i try to access member variable of smp from compare function?
i had tried by declaring as followed inside the global function:
smp *tempsmp = new smp();
AfxMessageBox(tempsmp->strName);
i got empty string...
global in vc++ is very confusing..
|
|
|
|
|
you can not just create another smp... (it will instantiate a new smp object that does not have the correct strName)
you have to pass the pointer of you smp into the global function in order to access the strName
something like this:
void compare(smp* s)
{
AfxMessageBox(s->strName);
}
Casa.Sapo.pt
|
|
|
|