|
Yes, however the controller(s) may not send responses back right away as some messages they handle may have a higher priority then my request for data. I am just trying to get a feel for the timing constraints for worst case data aquisition. Based on krmeds replay it would appear I am well within the capabilities of Windows.
Thanks
|
|
|
|
|
jonsey29847 wrote: Yes...Windows.
So which is it? Windows is not a RTOS, thus it cannot do anything every two microseconds.
Rather than polling, why don't you let the serial port tell you when it has data?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
My application is to communicate with an ECU (OBDII controller), the ECU is real time.
The controller has to be polled to get the data, my attachment point is a network (CAN) thus any data I see may be for other devices on the network.
|
|
|
|
|
Hello everyone,
Opaque pointer must be a pointer points to inner (hidden to outside) struct or class?
(refer to the C++ part)
http://en.wikipedia.org/wiki/Opaque_pointer
thanks in advance,
George
|
|
|
|
|
Interesting technique!
Maxwell Chen
|
|
|
|
|
Thanks Maxwell,
Any answers to my original question?
regards,
George
|
|
|
|
|
You have seen the C++ sample code on Wikipedia page.
As we know that if you declare an object member (as sample below):
class Object
{
};
class User
{
Object obj;
}; If you change anything to class Object's definition, the compiler recompiles class User (regarding to compilation unit), too.
But if you change into the below, it won't need to recompile class User.
class User
{
class Object;
Object* pObj;
};
class User::Object
{
};
Maxwell Chen
|
|
|
|
|
Thanks Maxwell!
My question is whether the wrapped pointer member must be pointing to inner structs/classes? Or the pointer could be pointed to global/namespace level structs/classes?
regards,
George
|
|
|
|
|
George_George wrote: whether the wrapped pointer member must be pointing to inner structs/classes? Or the pointer could be pointed to global/namespace level structs/classes?
Regarding to this term "opaque pointer", I think so. As wikipedia says it is to hide the internal implementations. If it were the below model, it wouldn't be something to hide.
class Object;
class User
{
Object* pObj;
};
class Object
{
};
Maxwell Chen
|
|
|
|
|
Thanks for sharing your points, Maxwell!
regards,
George
|
|
|
|
|
It may point to anything. Inner or outer, it's a bad practice. It's highly recommended not to use it.
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
VuNic wrote: It may point to anything. Inner or outer, it's a bad practice. It's highly recommended not to use it.
See this article for detailed descriptions: Compilation Firewalls[^].
Maxwell Chen
|
|
|
|
|
Thanks Maxwell,
Good link, I will study it.
regards,
George
|
|
|
|
|
That deals with just one case. But the article has not talked about the dangerous side of it. If you are have hard pointers like that, there's heck a lot of chances that you'll end up in memory leaks. If the program is 21 odd lines, then there's no problem. But in an application that has 40-50 thousand lines, if you are implementing hard pointers like this, that's it. It's an assured dissaster. I guess opaque pointers fit more better for the raw C guys and not C++. I'll give a little example here:
<br />
class MyApp<br />
{<br />
<br />
MyGun* pmygun;<br />
MyBomb* pBomb;<br />
MyMissle* pMissile;<br />
.<br />
.<br />
.<br />
<br />
}<br />
MyApp()<br />
{<br />
}<br />
<br />
LoadWeapon(Handle,Type)<br />
{<br />
}<br />
<br />
UnloadWeapon(Handle,Type)<br />
{<br />
<br />
}<br />
<br />
<br />
~MyApp()<br />
{<br />
}<br />
And sometime back my mate had such a pointer(pobj) in his MyAppclass, and in the destructor he kept calling pobj->release() without checking if it's been initialized or not. In most of the circumstances it got initialized and it went fine, but a tricky flow got thru these initializing conditions and when the destructor of the MyApp class got called, it crashed the application. This is just one example . I've seen a lot more like that.
I wish to suggest something called the smart-pointers.
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Thanks VuNic,
The issues you described above are the common issues with raw pointers, are there any special new issues you described above special for opaque pointers?
regards,
George
|
|
|
|
|
But I think it's basic responsibility to check validity of pointers before using them to do release job.
~Foo() {
if(m_pG) {
m_pG->Release();
m_pG = NULL;
}
}
Maxwell Chen
|
|
|
|
|
Thanks VuNic,
Bad practice you mean pointing to outer or using opaque pointer?
regards,
George
|
|
|
|
|
See HERE[^].
Maxwell Chen
|
|
|
|
|
Hi Maxwell,
How do you pronounce the word "Pimpl"?
regards,
George
|
|
|
|
|
George_George wrote: How do you pronounce the word "Pimpl"?
I don't know. But "PIMPL" is a widely seen term in C++. You can google with this keyword "PIMPL".
(No 'e' at the tail.)
Maxwell Chen
|
|
|
|
|
I got it. "Pimpl" is "Private implementation" for short.
Maxwell Chen
|
|
|
|
|
Thanks Maxwell,
regards,
George
|
|
|
|
|
Hello everyone,
When implementing a general template class, sometimes we call T() -- suppose T is type argument of a template class.
My questions,
1. what will happen if T is POD type? Do nothing?
2. Is it good code? Or working but not good code?
Here is my test code, works in MSVC 2008.
template <class T> class Foo {
public:
void static test()
{
T();
}
};
int main()
{
Foo<int> g;
g.test();
return 0;
}
thanks in advance,
George
|
|
|
|
|
I've got VC6 open at the moment, and the "constructor" for an int returns a zero-initialized int. Change test to:
T test() { return T(); }
and look at the assembly. You can also do:
int x = int();
|
|
|
|
|
Thanks Michael,
Do you think it is C++ standard to initialize POD type to zero?
regards,
George
|
|
|
|