Click here to Skip to main content
16,005,065 members
Home / Discussions / C#
   

C#

 
AnswerRe: Threads and Windows Forms Pin
Dave Kreskowiak13-Apr-09 8:52
mveDave Kreskowiak13-Apr-09 8:52 
GeneralRe: Threads and Windows Forms Pin
kikeman13-Apr-09 10:05
kikeman13-Apr-09 10:05 
GeneralRe: Threads and Windows Forms Pin
Dave Kreskowiak13-Apr-09 10:39
mveDave Kreskowiak13-Apr-09 10:39 
GeneralRe: Threads and Windows Forms Pin
kikeman13-Apr-09 11:10
kikeman13-Apr-09 11:10 
QuestionArray of Structs overwrite problem Pin
Bruce Coward13-Apr-09 5:41
Bruce Coward13-Apr-09 5:41 
AnswerRe: Array of Structs overwrite problem Pin
Luc 64801113-Apr-09 6:06
Luc 64801113-Apr-09 6:06 
GeneralRe: Array of Structs overwrite problem Pin
Bruce Coward13-Apr-09 6:24
Bruce Coward13-Apr-09 6:24 
GeneralRe: Array of Structs overwrite problem Pin
Luc 64801113-Apr-09 7:17
Luc 64801113-Apr-09 7:17 
Hi Bruce,


Bruce Coward wrote:
an unused buffer address


I agree a simple circular buffer wastes one slot, since you must discriminate the empty case (getptr=putptr) and the full case (getptr=putptr), which is easiest by never filling the buffer completely, so there will always be an empty slot, however it moves around: the pointer arithmetic should use the actual array size, whatever extra elements get allocated are simply wasted.
So if you do array[DIM+1} then you should also do PTR=(PTR+1)%(DIM+1) otherwise PTR will never point to ARRAY[DIM].


Bruce Coward wrote:
how do I change this to store real individual values


You must make sure the data either resides in a different array each time (so the caller must provide a new array each time), or you must copy the data into an array you allocate yourself. I prefer the latter, and I would try and allocate all the buffers just once (when intializing the circular buffer) and copy the data in them.

Depending on how you actually obtain the data from CAN, there is or isn't a way of saving one copy operation:
- split the queueMessage method in two parts;
- use first part to obtain the next array (the array preallocated for the next slot in the circular buffer) but don't advance the put pointer
- call "driver" to fill that buffer
- call remaining part of queueMessage to stuff value types, and advance slot pointer which makes it readable for the CAN message consumer.

Smile | :)
AnswerRe: Array of Structs overwrite problem Pin
Gideon Engelberth13-Apr-09 8:51
Gideon Engelberth13-Apr-09 8:51 
GeneralRe: Array of Structs overwrite problem Pin
Luc 64801113-Apr-09 9:01
Luc 64801113-Apr-09 9:01 
AnswerRe: Array of Structs overwrite problem Pin
Alan N13-Apr-09 9:49
Alan N13-Apr-09 9:49 
GeneralRe: Array of Structs overwrite problem Pin
Luc 64801113-Apr-09 10:29
Luc 64801113-Apr-09 10:29 
QuestionCross-thread error. Pin
Fired.Fish.Gmail13-Apr-09 4:58
Fired.Fish.Gmail13-Apr-09 4:58 
AnswerRe: Cross-thread error. Pin
Colin Angus Mackay13-Apr-09 5:06
Colin Angus Mackay13-Apr-09 5:06 
GeneralRe: Cross-thread error. Pin
Fired.Fish.Gmail13-Apr-09 5:20
Fired.Fish.Gmail13-Apr-09 5:20 
GeneralRe: Cross-thread error. Pin
Henry Minute13-Apr-09 5:22
Henry Minute13-Apr-09 5:22 
AnswerRe: Cross-thread error. Pin
Luc 64801113-Apr-09 5:39
Luc 64801113-Apr-09 5:39 
Questionstruct or class? Pin
Jammer13-Apr-09 4:27
Jammer13-Apr-09 4:27 
AnswerRe: struct or class? Pin
DaveyM6913-Apr-09 4:34
professionalDaveyM6913-Apr-09 4:34 
GeneralRe: struct or class? Pin
Colin Angus Mackay13-Apr-09 4:38
Colin Angus Mackay13-Apr-09 4:38 
AnswerRe: struct or class? Pin
PIEBALDconsult13-Apr-09 5:14
mvePIEBALDconsult13-Apr-09 5:14 
GeneralRe: struct or class? Pin
Colin Angus Mackay13-Apr-09 5:22
Colin Angus Mackay13-Apr-09 5:22 
QuestionSql Backup Pin
nagendra.vk13-Apr-09 4:24
nagendra.vk13-Apr-09 4:24 
AnswerRe: Sql Backup Pin
Colin Angus Mackay13-Apr-09 4:43
Colin Angus Mackay13-Apr-09 4:43 
QuestionHandling Exceptions from another thread Pin
Fayu13-Apr-09 4:02
Fayu13-Apr-09 4:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.