|
You can maintain a static list of ball objects that is available to all threads and use it to compare for intersection.
I am curious as to how many processors you have? Usually for such a scenario all of the thread logic would be handled via one thread and the drawing in another. That is really the simplest scenario.
To really split it up you need to seen each thread a region of control (not a ball) and have the thread check regions of control for intersections and then pass control to another entity to check for intersections when balls hit boundaries on regions of control.
Best bet, just use one thread for balls and one for UI. Also, use a rectangle for collision testing first to significantly increase performance.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
Using threads this way is a bit odd. Typically you would use one thread and then tick the entire simulation. You will get *strange things* happening if you are ticking different parts at different rates, and having balls interact with parts of a ball thats halfway thru its collision detection code. Expect to use a lot of locking to get things right.
If you are doing this as an exercise in threads - then look at keeping a dictionary of Ball to Thread around.
If you just want some bouncing balls then immediately throw this threading away and do it in a single thread that loops through all the balls.
|
|
|
|
|
Thanks for the responses.
It was an academic exercise but I think it was a fairly poor practical example of using threads.
|
|
|
|
|
I want get all the occurences for one string (e.g. keyword) in an ASP or html file. But I want to ignore some special html/asp tag that includes the searched string (in my case it is "keyword").
for example:
1) this is a test keyword string. (I want this)
2) <a href='#'>the is second keyword</a> (I don't want this)
2) <%
'this is keyword in asp code
%>
(I don't want this)
I know regular express may solve this problem. But I don't know how??
Can somebody give me an example regular exression for this??
Thanks a lot!
Alan Shen
MCAD for .NET Version
^~^~^~^~^~^~^~^~^~^~^
Great idea is the beginging of success!
|
|
|
|
|
Do the following, where 'keyword' is the search string (must have length of at least 2 characters)and 'str' is the file string:
bool inAsp = false;
bool inATag = false;
List<int> matches = new List<int>();
List<int> curGuess = new List<int>();
for (int i = 0; i < str.Length; ++i) {
char c = str.CharAt(i);
if (inAsp) {
if (EndingAspTag)
inAsp = false;
continue;
} else if (inATag) {
if (EndingATag)
inATag = false;
continue;
} else if (StartingAspTag) {
curGuess.Clear();
inAsp = true;
} else if (StartingATag) {
curGuess.Clear();
inATag = true;
}
for (int j = curGuess.Count - 1; j >= 0; --j) {
if (c != keyword.CharAt(++curGuess[j]))
curGuess.RemoveAt(j);
else if (curGuess[j] == keyword.Length - 1) {
matches.Add(i - curGuess[j]);
curGuess.RemoveAt(j);
}
}
if (c == keyword.CharAt(0))
curGuess.Add(0);
}
for (int i = 1; i < matches.Count; ++i) {
if (matches[i] - matches[i - 1] < keyword.Length)
matches.RemoveAt(i--);
}
</int></int></int></int> The code for the above conditions to check for entering or exiting an 'asp' or 'a' tag segment is non-trivial, as you also need to take into account whether you are within quotes, but you get the idea. This is also very inneficient, but it will work. Hope this helps,
-Jeff
|
|
|
|
|
Small Rat wrote: I know regular express may solve this problem. But I don't know how??
Can somebody give me an example regular exression for this??
Have you attempted to solve the problem yourself? This site isn't for people who want their work done for them. There's plenty of resporces on Regular Expressions available on the web. Have you looked at any of them.
BTW, I'm particularly surprised to see such behaviour from someone who claims to be Microsoft certified
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
Honestly. This is a C# forum. Do you really think you are going to get ASP help in this forum?
|
|
|
|
|
hi there,
i want to know that which event is called when we add or delete items in listbox?
i search around all events but didnt find, will i need to use any trick or i'm missing something?
thanks
Becoming Programmer...
|
|
|
|
|
I don't think there is one. But shouldn't you already know when something is being added or removed, as you will have to call listBox.Add() and listBox.Remove() ?
My current favourite word is: Bauble!
-SK Genius
|
|
|
|
|
yeah, but i'm calling these functions from lots of places and i want to do a big stuff when this happens, event is the best way to do that but i think here is no event for it
Becoming Programmer...
|
|
|
|
|
Hi,
I would like to change the background colour of a particular cell in the datagridview.
Please note that I only would like to do this in the procedure I have created using the column and row position and not in the events such as cellformat or selected changed.
What I am after is something like:
datagridview[columnName][RowIndex].backgroundColor = blue
Thanks
|
|
|
|
|
Datagridview cell has a property called style which allows you to customize appearance of the cell. (BTW, it has a property called BackColor. Guess what it does )
|
|
|
|
|
Hi I have the following code
basically it is meant to increment the database value by 1
however it is not doing that it doesnt add 1 to it
any suggestions cheers
string maxquery = "Select Max(activity_order) from roomactivitylk where room_code = '" + room_code + "'";
//cmd14.ExecuteScalar();
int max = 0;
int max;
SqlCommand cmd15 = new SqlCommand();
//SqlCommand cmd15 = new SqlCommand(test0001, con);
cmd15.Connection = con;
cmd15.CommandText = maxquery;
max = (int)cmd15.ExecuteNonQuery();
max = max + 1;
++max;
max++;
|
|
|
|
|
Of course it does. All three ways of increasing the value that you have tried works just fine.
How have you come to the conclusion that it doesn't work? How are you viewing the value?
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
the value that comes out the database should be 4 but for some reason appear as 1 i dont know if thtas something to do with the in
anyway when i run the same qeury in sql query analsyer it ocm4es out as 4
however running the query in c# it comes out as 1?
any clues
cheers tyhanks
|
|
|
|
|
The problem is not at all in increasing the value, but where you read the value from the database. You are not getting the value that the database returns, but the number of records that the result contains.
Use ExecuteScalar instead of ExecuteNonQuery.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
ExecuteScalar does not work it comes up with an error
|
|
|
|
|
Guffa is right on target with ExecuteScalar... What error are you getting now?
|
|
|
|
|
Specified cast is not valid. pointing at the exceutescalar
|
|
|
|
|
Thought so... Try putting it in an object instead of an int (Without casting), just for debugging, and see what type it is (Set a breakpoint and take a look at it). If it's a different numeric type, just use Convert.ToInt32() instead of a direct cast. If you're getting a DBNull or a non-numeric type, there's something wrong with your query.
Also, in light of the other branch of this thread, remember that this isn't going to modify the database. All you're doing is asking the database for a number, and incrementing your copy of that number. If you want to make a change to the database, that's a separate operation.
|
|
|
|
|
Hi
How would i set the int to the object, woudl i not declare an int at all?
cheers sp far
|
|
|
|
|
As I said, figure out what type you're getting back. If it's a different type of number (long, short, byte, float, etc), you can use Convert.ToInt32(x) to convert x into a standard int.
If you messed up the query and are getting a date, a string, a DBNull, or something weird, well then you have another bug.
|
|
|
|
|
If it is SQL Server you should use an identity and if it is oracle you should use a Sequence.
The code you have is not updating the database because ADO.NET is disconnected from the database.
"SELECT @maxValue = MAX(activity_order) FROM table WHERE clause;
UPDATE table SET activity = @maxValue + 1 WHERE clause;
"
Will do what you want (make sure to add an output parameter to the command) but it is sloppy.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
can the above used in c#?
e.g. string maxquery2 = "SELECT @maxValue = MAX(activity_order) FROM roomactivitylk WHERE room_code = 'v1106';UPDATE roomactivitylk SET activity_order = @maxValue + 1 WHERE room_code = 'v1106';";
cheers
|
|
|
|
|
But you need to place a parameter in your command object.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|