My app is written using C#, it will communicate with another device using USB 3.0. And the Use 3.0 contains three communication streams: two cameras providing image stream at about 12MB/s and 2MB/s, and one rs422 stream at a rate of 2 frames ( about 20 bytes each frame) per seconds. The Rs422 setting is 9600 rate. The rs422 is converted to USB type to communicate with the pc.
In my app, I receive the camera’s image and rs422 data to show on WPF controls.
The problem is that my process can’t be scheduled for about 12 seconds, which results in my process can’t receive the image and data for a while, and after 12 seconds it can resume receiving the image and data. The problem happens even if the priority of the process is realtime.
More tests show:
(1) I run the process for 24 hours, and it can happen several times( 3 times or 5 times likely).
(2) I run the app in different pcs (all pcs us windows 10 64 bits), some are desktop computers, and some are notebook computers. The problem only happens on my two desktop computers. Besides, the performance of my notebook computers is more powerful than the desktop computers.
(3) Many tests show that the unscheduled time is 12 seconds.
(4) If my app only communicates with the cameras, the problem doesn’t happen.
(5) If my app only communicates with the rs422, the problem doesn’t happen.
I guess the reason for the problem is:
(1) The hardware of the USB wire or chip may be influenced by others, and the communication comes across some problems, and result in the drive on os to an unstable state.
(2) Or the big data communication to exceed maximum buffer in the drive and result in the os can’t schedule my process.
And I want to see what happened on the os, which results in my process can’t be scheduled for a while.
How can I track it?
Is there any method or tools to give some clues?