|
I dont understand the context for this question, so it seems to me that there is not enough information to answer your question. Do you know what your memory map is for, or who creates it?
Build a man a fire, and he will be warm for a day Light a man on fire, and he will be warm for the rest of his life!
|
|
|
|
|
Under Vc++ 6.0 and MFC, how can I set items' images of the toolbar.These images were saved as .bmp or .ico. And I known how to load the .bmp to CBitmap.
Help me!!!
Help me!!!
Help me!!!
|
|
|
|
|
Try this:
CToolBar::LoadBitmap()
CToolBar::SetBitmap()
or call CToolBar::GetToolBarCtrl()
And then access single items – more: CToolBarCtrl member functions
Viliam
|
|
|
|
|
I means that one item have its own one image.
A toolbar has several images, not one bitmap to all items.
|
|
|
|
|
I've got this for my tute question!
A large organisation has offices in several countries around the world. Explain why it is desireable for the organisation's directory service to be "multi-master"
Could any one please enlighten me! Thanks.
|
|
|
|
|
Huh ?! I assume that it got to be related to the Active Directory thing, just read about it, it's bound to be explained somewhere in there .
Max.
|
|
|
|
|
I'm trying to generate a short delay of just a few ms, which I need because I am controling a box on the serial port which is very slow and the input is un-buffered so I need to pad the data.
I am using Sleep(x), where x is the number of ms. However, I get a much longer delay than I need, ie Sleep(1) gives me 70ms!
Anyone got any ideas of how I can generate a short delay reliably?
Thanks,
Ali
|
|
|
|
|
You can try Sleep(0), it causes the thread "to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run."
Vagif Abilov
MCP (Visual C++)
Oslo, Norway
Hex is for sissies. Real men use binary. And the most hardcore types use only zeros - uppercase zeros and lowercase zeros.
Tomasz Sowinski
|
|
|
|
|
Thanks for the suggestion, I'm not sure it will give consistent enough results - I'll look in to it though.
Thanks,
Ali
|
|
|
|
|
You didn't say what operating system you were using. I doesn't answer your question, but you may find the following article interesting...
http://www.codeproject.com/system/simpletime.asp
Gary Kirkham
A working Program is one that has only unobserved bugs
|
|
|
|
|
Looks like an interesting article, thanks for the tip.
Cheers,
Ali
|
|
|
|
|
I am afraid there is no way how to suspend process on accurate time.
(Windows are not real - real-time system)
The easiest way is use traditional way – run some loop
(and be on appropriate priority)
And check time...
Something like:
.
.
dwA = GetTickCount();
while(1)
{
dwB = GetTickCount();
if( (dwB-dwA) >= dwTimeout)
break;
}
This is not nice way but sometime can help.
Anyway times about 1 ms are probably unreachable.
Viliam
|
|
|
|
|
Using GetTickCount() is a great idea. I just checked the help and it returns the number of ms since start up, so as you suggest I can use it in a loop to make a basic timer.
I agree that 1 ms is impractical but if I try for 1 ms and get 2 ms or 3ms or even 4ms, that woud be far better than 70+ ms!
Thanks for the help,
Ali
|
|
|
|
|
One thing you have to watch out for. If you keep your computers on all the time, the rollover of the time could effect your calculation (e.g the start time could be greater than the end time). You just have to put in checking for this.
Brigg Thorp
Software Engineer
Timex Corporation
|
|
|
|
|
Good point, as you say pretty easy to check for, I'll make sure I do.
Thanks,
Ali
|
|
|
|
|
as i know, serial port needs a thread (call it thread A) to read data.
u say "delay", delay what? for what?
i assume that u want "delay" (by Sleep) main thread (parent thread of thread A) to active Thread A. this is not correct in concept, the 70ms must be got from Thread A, the time is meaningless, just forget it.
only choice i think is to set a timer (few ms) in main thread for delay, then kill the timer.
includeh10
|
|
|
|
|
includeh10 wrote:
u say "delay", delay what? for what?
What I need is a delay between sending bytes because the receiving device is too slow and cannot buffer data coming in. If I send bytes too quickly they get ignored. But if I have really big delays then it takes ages to set up.
It looks like this is not possible, not sure what I am going to do.
Thanks for the advice,
Ali
|
|
|
|
|
i used communication port for years, do u use a event to check if sending buffer is empty?
includeh10
|
|
|
|
|
includeh10 wrote:
do u use a event to check if sending buffer is empty?
Yes, I send a block of data. I can see that the sending buffer is empty. Then I want to leave a gap of 1 or 2 ms to let the receiving device process the data before I send the next block of data.
If I do not leave a gap at all, then the receiving device ignores the first block of data and it is lost.
If I leave a big gap like 70ms to 100ms, I can't send the data quickly enough, because most of the time is used up by the gaps.
I think I may be able to use GetTickCount to create a basic timer, (see above reply). I think I will try that.
Thanks for your help,
Ali
|
|
|
|
|
communication port is not an easy job, u need to generate a good process in one app then for forevere (next apps).
i suggest u use 2 threads (sibling threads). one thread keeps all sending data in a buffer, another one is used for receiving data and deals with events.
u can use sleep between sibling threads to control working process.
if use many threads, make sure they are terminated properly (i used over 100 threads in one app). do not use CloseHandle() etc to interrupt threads, especially buffering threads. let threads exit natually, otherwise u may see exceptions often.
includeh10
|
|
|
|
|
includeh10 wrote:
communication port is not an easy job
Yes, thats true, and to be honest I have only one thread at the moment so that is obviously not helping. Looks like its time to look at threads!
Thanks for the advice,
Ali
|
|
|
|
|
I did something similar for a data collection thread that has to get spectra from a Diode array detector on set intervals. The way I did it was to the set thread priority very high (TIME_CRITICAL), so when the Sleep() completed, that thread was given control again. As it spent most of its time in a sleep() state it did not have any adverse effect of system performance.
Some of the oce envolved was:
RunThread->SetThreadPriority(THREAD_PRIORITY_TIME_CRITICAL) ;
FILETIME time1;
FILETIME time2;
::GetSystemTimeAsFileTime(&time1) ;
while (...)
{
::GetSystemTimeAsFileTime(&time2) ;
delay = (m_spectra_frequency * spectra_collected) - CalculateElapsedTime(&time1, &time2) ;
if (delay >= 0.001)
Sleep((unsigned long)(delay * 1000.0)) ;
}
double CalculateElapsedTime(FILETIME *start, FILETIME *current)
{
double elapsed_time ;
__int64 st ;
__int64 ct ;
__int32 *p ;
p = (__int32*)&st ;
*p++ = start->dwLowDateTime ;
*p = start->dwHighDateTime ;
p = (__int32*)&ct ;
*p++ = current->dwLowDateTime ;
*p = current->dwHighDateTime ;
elapsed_time = (double)(ct - st) ;
elapsed_time /= 10000000.0 ;
return elapsed_time ;
}
It may be of use
Roger Allen
Sonork 100.10016
I have a terminal disease. Its called life!
|
|
|
|
|
Thanks for the advice. Believe it or not I've got away with just one thread in all my apps up to now! But it looks like I cannot run away any longer, now is the time to look at threads.
I think I can see what you are explaining, its nice to have the code snippet to look at - I'll give it a go.
If you see some more questions about threads from me in the coming days you'll know it hasn't gone well!
Thanks again,
Ali
|
|
|
|
|
If I have this below CString data and I want to change it format to int.
Example:
CString data_str = "1487";
int data_int;
I want
data_int = 1487
Do you know how to do that?
|
|
|
|
|
Sometimes the C runtime comes in handy: atoi()[^]
|
|
|
|