|
EliottA wrote: Ahh thanks, I first ran it with extremely small numbers (0 to 10, 0 to -10) and thought my 500/-200 changes would allow me to have the overlapping results I was testing for. Going to try now and if it works, I guess the error on my part is assuming the speed of threads to be higher/ slower then I expected.
In non realtime OSes the overhead involved in swapping threads is high enough that they generally get several milliseconds at a minimum before being swapped out. Realtime OSes can do the swap much faster, and have significantly smaller time slices as a result, but have their own limitations due to the architectural changes needed to support the fast switching.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots.
-- Robert Royall
|
|
|
|
|
A follow up:
500000/-200000 worked and I had overlapping results.
Thanks for the help.
|
|
|
|
|
EliottA wrote: From my understanding from what I've read
Read where?
EliottA wrote: both firstThread and secondThread should be executed simultaniously
I don't know where you got that from, but that contradicts what I know about using multiple threads. Without knowing what you read, I can only guess that either your source is incorrect or you did not understand it correctly.
led mike
|
|
|
|
|
|
led mike wrote:
ElliotA wrote: both firstThread and secondThread should be executed simultaniously
I don't know where you got that from, but that contradicts what I know about using multiple threads. Without knowing what you read, I can only guess that either your source is incorrect or you did not understand it correctly.
The threads can run concurrently on a multithreaded system. Only on a single core non HT system is sequential/interleaved behavior guaranteed.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots.
-- Robert Royall
|
|
|
|
|
Hi,
on a single core without hyperthreading the CPU will be used by one thread until it runs out of a job, or something really significant occurs that makes the OS decide to switch threads; threads are not switching all the time, it is just too expensive.
You could add a random delay (with Thread.Sleep) to one or both of your threads; and then you could set one of them at a "below normal" priority, to make things more interesting (make sure the highest priority one has reasons not to finish in one stint).
As soon as hyperthreading or multi-core hardware is involved, two or more threads may really run at the same time, until or unless they get synchronized somehow. Both of them using the same TextWriter will synchronize them: the class has to do something to prevent characters of multiple lines (from different threads) getting intertwined.
Another experiment would be:
have one integer counter as class members.
thread1 increments counter and stores value of counter in a List<int>
thread2 decrements counter and stores value of counter in another List<int>
Don't call any I/O in those threads, don't create a possible synchronization point, just let them try to get 100% of the CPU cycles.
After some time, stop both threads and list (part of) one or both Lists.
Without multicore/HT the lists will be monotonous for a long time (say 16 msec); with MC/HT they ideally would oscillate around zero assuming identical code in both threads, and they would evolve "slowly" if one of the threads wastes some cycles with respect to the other (by adding some statements that don't get optimized away).
|
|
|
|
|
So if I am not running on a multithreaded processor, ad you are saying each thread will be executed in order that they are started, why bother creating multiple threads at all??? Where is the gain? Wow Now you guys just made me have 1000 questions, which I am sure 999 will be stupid.
|
|
|
|
|
Hi,
Basically multi-threading is to an app, what multitasking is to a system.
So the potential gain is twofold:
1.
as soon as one thread can not continue (e.g. pending I/O) instead of the CPU becoming idle (assuming only one app is present), another thread will take over, hence the total app's elapsed time CAN be much less than when you do everything sequentially on a single thread.
2.
your app MAY be much simpler to write in a multi-threaded way: you might ignore how the events in different threads will occur in real-time, and get away with it. In a single thread things are bound t occur in the order they were programmed in code, which may or may not be an accurate representation of the outside world.
However, thread synchronization may be a concern, if you don't synchronize, results may be wrong; and if you don't synchronize correctly, deadlocks may occur, causing your app to hang.
|
|
|
|
|
Yay!!! I love it when things go back to basics!
j.t.
|
|
|
|
|
This is more of a Video question. I hope someone out there can help me out, and if so, I really appreciate it. I am trying to modify the DVD Player sample for DirectShow to use VMR9 with the allocator and presenter. I setup code to RenderDvdVideoVolume with the VMR9Only flag and I added code to FindFilterByName for the Video Mixing Renderer 9 from the filtergraph. I get the filter and it is not null. Then I want to configure the filter, so I get the IVMRFilterConfig9 interface by casting my filter to that interface as done in quite a few of the examples. By the way, this is being done on a machine with Windows Vista. Next, when I use the config interface to configure the VMR9 filter, I run into problems. If I try to set the rendering mode or the number of streams I get an exception that tells me "The operation could not be performed because the filter is in the wrong state." I have looked all over for solutions to this, but I have not had any luck. Below is a snippet of my code and the VMR9 filter is declared outside of this snippet as a private IBaseFilter.
int hr;
AMDvdRenderStatus status;
object comobj = null;
try
{
dvdGraph = (IDvdGraphBuilder)new DvdGraphBuilder();
//filter = (IBaseFilter)new VideoMixingRenderer9();
//hr = dvdGraph.RenderDvdVideoVolume( null, AMDvdGraphFlags.None, out status );
hr = dvdGraph.RenderDvdVideoVolume(null, AMDvdGraphFlags.VMR9Only, out status);
DsError.ThrowExceptionForHR( hr );
hr = dvdGraph.GetDvdInterface( typeof( IDvdInfo2 ).GUID, out comobj );
DsError.ThrowExceptionForHR( hr );
dvdInfo = (IDvdInfo2) comobj;
comobj = null;
hr = dvdGraph.GetDvdInterface( typeof( IDvdControl2 ).GUID, out comobj );
DsError.ThrowExceptionForHR( hr );
dvdCtrl = (IDvdControl2) comobj;
comobj = null;
hr = dvdGraph.GetFiltergraph( out graphBuilder );
DsError.ThrowExceptionForHR( hr );
hr = graphBuilder.FindFilterByName("Video Mixing Renderer 9", out filter);
DsError.ThrowExceptionForHR(hr);
if (filter == null)
{
MessageBox.Show("Need to add the VMR9 Filter");
}
IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)filter;
//**********
// This is where I run into the exception
//**********
//hr = filterConfig.SetRenderingMode(VMR9Mode.Renderless);
hr = filterConfig.SetRenderingMode(VMR9Mode.Windowed);
DsError.ThrowExceptionForHR(hr);
hr = filterConfig.SetNumberOfStreams(1);
DsError.ThrowExceptionForHR(hr);
SetAllocatorPresenter();
mediaCtrl = (IMediaControl) graphBuilder;
mediaEvt = (IMediaEventEx) graphBuilder;
hr = dvdGraph.GetDvdInterface( typeof( IVideoWindow ).GUID, out comobj );
DsError.ThrowExceptionForHR( hr );
videoWin = (IVideoWindow) comobj;
comobj = null;
GetFrameStepInterface();
return true;
}
catch( Exception ee )
{
MessageBox.Show( this, "Could not get interfaces\r\n" + ee.Message, "DVDPlayer.NET", MessageBoxButtons.OK, MessageBoxIcon.Stop );
CloseInterfaces();
return false;
}
finally
{
if( comobj != null )
{
Marshal.ReleaseComObject( comobj );
comobj = null;
}
}
I was able to get part of this problem figured out. To configure the filter, it has to be done before rendering the video with the call to RenderDvdVideoVolume(). My next problem I have run into is setting up the AllocatorPresenter. The call to GetDvdInterface() with the IVMRSurfaceAllocatorNotify9 interface is returning a message that states "No such interface supported". I need to determine a way to get around this. Any help would be greatly appreciated.
Thanks in advance.
GrizMan
modified on Tuesday, December 2, 2008 10:54 AM
|
|
|
|
|
This is a late comment, but the Microsoft documentation states that you can get the VMR9Config and VMR9AplhaBitmap interfaces by calling IDVDGraphBuilder:GetDVDInterface()
IE:
hr = dvdGraph.GetDvdInterface(typeof(IVMRFilterConfig9).GUID, out comobj);
and
hr = dvdGraph.GetDvdInterface(typeof(IVMRMixerBitmap9).GUID, out comobj);
You do this before you call the RenderDVDAudioVideo and the graph understands that you want to use the VMR. Past that, you should be able to follow the VMR samples.
I think that the only thing that you really need is to get the MixerBitmap interface and then you can send an Alpha bitmap from a mem dc anytime that you want. I could be incorrect on that.
Myself, I am getting an hr = 1 on RenderDVDAudioVideo. Is strange, as I can manually build the graph I want.
MB
|
|
|
|
|
How much does Try... Catch blocks slow down your code?
I understand that if you have one it's nothing, but if you have multiple try... catches that are nested, how will efficiency and speed be effected?
If there is a significant decrease in efficiency and speed, what would be the best way to regain that lost efficiency without compromising integrity and catching those exceptions?
(Sorry if this post isn't directly related to C#, I'm well aware it should have gone in .NET framework, but I wasn't quite to sure if this could be a direct C# issue if at all and wasn't so concerned for a c++.net/CLI or VB.net answer)
|
|
|
|
|
EliottA wrote: How much does Try... Catch blocks slow down your code?
Not at all. They can actually be quicker than having to test everything to avoid Exceptions.
|
|
|
|
|
Everything I've read suggests that having try/catch blocks does not affect performance. The only way performance is affected is if you are throwing exceptions.
(And yes, this is a general .NET thing, not a C# specific one)
|
|
|
|
|
EliottA wrote: How much does Try... Catch blocks slow down your code?
I've never seen it slow down any of my apps.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
Hi,
the try statement pushes some information to the execution stack; this info gets popped again when the try block closes without exceptions; or the stack gets searched for it when an exception occurs (that is the purpose of the info). So a try statement has a small cost associated with it.
Manual nesting of try blocks will have a limited depth, and typically only the inner one will be relevant; now there is no way around if you want to catch a possible exception at that level (e.g. because you want to continue with the next iteration of the inner loop).
And you can't easily nest try blocks programmatically (if would take run-time code generation to do that), unless you have a recursive method. Which is the way to go if you want to measure the try cost: write a recursive program containing a stopwatch and run it; then add a try-catch to the recursive method and measure it again. You probably will not see a significant difference, the recursion is much more costly than the try statement itself.
Here is some test code:
public override void Test(int arg) {
long rep=100000;
long n=1000;
Stopwatch sw=new Stopwatch();
sw.Start();
for (int i=0; i<rep; i++) sw.Stop();
log(sw.ElapsedMilliseconds.ToString());
Stopwatch sw2=new Stopwatch();
sw2.Start();
for (int i=0; i<rep; i++) sw2.Stop();
log(sw2.ElapsedMilliseconds.ToString());
}
long fact(long n) {
if (n<=1) return 1;
return n*fact(n-1);
}
long fact2(long n) {
try {
if (n<=1) return 1;
return n*fact2(n-1);
} catch (Exception) {
return 0;
}
}
modified on Wednesday, November 26, 2008 4:39 PM
|
|
|
|
|
Hi All!
I am trying to search for any URL inside files on my hard drive and these URL's could be anywhere inside the file, surrounded by letters/numbers etc and place each found URL into a listbox or string but it is proving to be very difficult. I was wondering if anybody might have any pointers/samps/links they could kindly share? Id appreciate any help I can get from anybody. Thanks for your time
Regards,
j.t.
P.S.
the code i have is as follows but something tells me i'm goin' about this the wrong way...:
private void SearchButton_Click(object sender, EventArgs e)
{
string fName = FileList.SelectItem.Text;
StreamReader testTxt = new StreamReader(fName);
string allRead = testTxt.ReadToEnd();
testTxt.Close();
string regMatch = "http://www." + <word> + ".com"/".net"/".org";
if (Regex.IsMatch(allRead, regMatch))
{
SearchQueryTextBox.Text = (regMatch + " was found.");
}
else
{
SearchQueryTextBox.Text = (regMatch + " could not be found.");
}
}</word>
j.t.
|
|
|
|
|
You don't cover https, or urls that were stored without the www or the http://, or with something else. You also assume all sites are American. But, if you clean up the regex, this is certainly the way to go about it.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
Thanks I'm still a little stuck though, I don't know what to do next.
j.t.
|
|
|
|
|
Hi,
I have 2 databases, I´m using linq to duplicate entries from one to the other.
One table is an entry table with an identity column in the source database and I want to replicate to the other database.
The tables are exactly the same except for one column, the primary key, is an IDENTITY column.
I want to use the same class for the source/target table for code reuasability, but I´m unable to figure out how to fix it with the identiy column.
Is there a way to change this attribute runtime ?
[Column(Storage="_Nr", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
I think that would solve my problem.
Thanks.
|
|
|
|
|
Hello all, (sorry if it is lay-man question)
here is my scenario:
1. Windows client in one machine, Remote object is hosted in IIS in different machine.
I need to pass context information (say, user identity) to remote object from client. I can achieve this from CallContext object but ThreadPool management of IIS sometimes not migrating the callcontext information in thread swapping scenario (from threadpool), so, the information is lost. (if have time read this article http://piers7.blogspot.com/2005/11/threadstatic-callcontext-and_02.html)
I decided to use HTTPContext object, which will be passed across different threads properly. I am planning to store the identity info to HTTPContext object at client and retrieve it from server.
a. In this scenario how can i make use of httpContext object?
b. is that at all possible or make sense to use HTTPContext in this scenario?
c. do we need to have only web client to make use of httpContext object?
(Am using HTTChannel for remote sinks)
Appreciate any inputs.
Thanks.
|
|
|
|
|
hai this is madhu...,
Please help me....
the below coding is getting path from App.config. The problem is..i gave path static. but i want that path is taking by default. Please help me.
XmlDocument doc = new XmlDocument();
doc.Load(System.Configuration.ConfigurationSettings.AppSettings["hardwareinfo"].ToString());
XmlNodeList bookList = doc.GetElementsByTagName("hardware");
foreach (XmlNode node in bookList)
{
XmlElement bookElement = (XmlElement)node;
txtOS.Text = bookElement.GetElementsByTagName("OperatingSystem")[0].InnerText;
txtProcessor.Text = bookElement.GetElementsByTagName("Processor")[0].InnerText;
txtMemory.Text = bookElement.GetElementsByTagName("Memory")[0].InnerText;
txtHardDisk.Text = bookElement.GetElementsByTagName("HardDisk")[0].InnerText;
}
---------- the app config---
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="hardwareinfo" value="E:\Madhu\Work\Old\SampXML\SampXML\hardwareinfo.xml"/>
</appSettings>
</configuration>
|
|
|
|
|
We have two types of assertion classes in .NET: Debug and Trace. I understand Debug assertions are only for development and are not shipped if built in release mode. How do you decide which one to use? I know if I want the assertion to fire during production then I should use Trace but what can help me decide this. I am also aware too many production assertions can hinder performance.
|
|
|
|
|
Actually, it's simple: The things you only want to see in debug mode should use Debug , the others Trace . If you use a library like log4net[^] then you can also differentiate between Debug, Info, Warning, Error and different output formats like file, e-mail, syslog etc., which is more suited for real production message logging.
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Hi all, i didn't know which forum to post this on, so i hope this is the right one
(i know i wrote a lot of stuff here, if you should be to lazy to read all of this, i understand , but please read the last codeblock)
I am making a program in c# which detects usb devices and does stuff with the info i collect. I don't have a lot of experience with the usb stuff, so i have googled a lot of info together. Most of my code i wrote i translated from a c++ program. But my knowledge of c++ is minimum.
The problem is that i'm not able to translate a certain line of code to c#
in c++ i have something like this (i just copied a small piece but i think you get the idea)
typedef struct DEV_BROADCAST_DEVICEINTERFACE {
DWORD dbcc_size;
DWORD dbcc_devicetype;
DWORD dbcc_reserved;
GUID dbcc_classguid;
char dbcc_name[1];
}
struct DEV_BROADCAST_HDR {
DWORD dbch_size;
DWORD dbch_devicetype;
DWORD dbch_reserved;
};
PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
PDEV_BROADCAST_DEVICEINTERFACE pDevInf;
pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
and in c# i have the following pieces of code
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_HDR
{
public int dbcc_size;
public int dbcc_devicetype;
public int dbcc_reserved;
}
[StructLayout(LayoutKind.Sequential)]
public struct
DEV_BROADCAST_DEVICEINTERFACE
{
public int dbcc_size;
public int dbcc_devicetype;
public int dbcc_reserved;
public Guid dbcc_classguid;
public short dbcc_name;
}
DEV_BROADCAST_HDR pHDR = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(msg.LParam, typeof(DEV_BROADCAST_HDR));
DEV_BROADCAST_DEVICEINTERFACE pDevInf;
now basicly i just want to translate THIS LINE from c++ to c#
pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
note: i have no idea what i'm doing, but i will be very happy if someone can give me a clue on how to translate this single line of code to c#
thanks in advance
|
|
|
|
|