Should Threads Update Global Data In The Main Program
Mar 18, 2011
I want to launch a bunch of threads, each performing the same task, and know in main() when each finishs and it if it was successful or failed.The solution offered was to use a ConcurrentQueue, but other posts have recommended using a BackgroundWorker Class, or a thread pool.Is there a definitive answer?Again, all threads perform the same code and have a pass/fail result. I want to run more than there are available threads so as soon as one thread finishes I will launch another asap - I want tehm to stress a remote systems as much as possible (reather than stressing my local PC with too many threads, so I will need to experiment to determine the optimal number of threads).
My software will simulate a few hundred hardware devices, each of which will send several thousand reports to a database server.Trying it without threading did not give very good results, so now it's time to thread.Since I am load testing the d/b server, some of those transactions will succeed and a few may fail. The GUI of the main program needs to reflect this. How should the threads communicate their results back to the main program? Update global variables? Send a message? Or something lese?
Now, if I update only at the end of each thread then the GUI is going to look rather boring (and I can't tell if the program hung). It might be nice to update the GUI periodically. But that might cause contention, with threads waiting for other threads to update (for instance, if I am writing to global variables, I need a mutex, which will block each thread which is waiting to write).
I'm new to threading. How is this normally done? Perhaps the main program could poll the threads, instead of the threads iforming the main program?
This was the code and this is the thread HERE Ok its working and everything but when i want to perform something when click is noticed it says i cant cross-threads
I try to create a sub main in a project but i can not.I have create a module called Module 1 and inside i have created a Main Sub which is intended to creta a thesaurus_form class instance , like this Code: Module module 1Public Sub Main()Dim thesaurus_form2= New Thesaurus_formEnd SubEnd module.Instead of this, once it has cretaed a first instance of the thesaurus_form class, it creates another one what i dont want at all..How can i do do make it execute the code which is inside the thesaurus_form_load sub..I also can not create a global variable or a staitc variable, because i receive this message.static is not valid in a member variable declaration.
I have this class and I have a loop that launches multiple threads from the same class. This is all done from the main form.Now I want to update the richtextbox on the main from these classes.I have tried those begininvokes etc etc and nothing worked, no error but no output as well.Here the code for launching the threads :
Private PingObjects(100000) As Account 'Account is the class and login is the sub in it... PingObjects(I) = New Account Threads(I) = New Threading.Thread(AddressOf PingObjects(I).login)
[code]....
And to update the rtb, im using MainForm.log.text = "....." Nothing happens, no error.I have tried using the begin invoker method as well.
Been a while since I did any VB work, and have started a new project that is a Windows Service that will update a database using multiple threads. I am testing this out with a dataset that consists of a "device name" and a "device IP", pinging the device, and attempting to update the device's "status".
I have it working in a single-thread type configuration, but would like to be able to ping and update different records across multiple threads (for obvious reasons).
The problem I'm having is with the logic mainly. When the service is started, I get all the devices from the database and fill a DataSet. From there, I am looping through the dataset's rows, pinging each device and updating the record. I know how to spawn multiple threads, but I do not know how to keep track of updating the correct record and also making sure that all records are checked in some kind of order. Like, if user specifies 5 threads, I need it to get record 1, thread finishes, gets record 6 (while other threads execute), or something like that.
Note: this does no interface updating or anything like that. Only updates a database record's field value.
I have a program that records time data in database when the user performs task. When I published the program for user install, I did not specify any update location. So, since initial creation, whenever I need to update the software, I simply install the new .exe file and this overwrites the old version and erases all data created by the old version (similar to uninstall and reinstall). Is there a way to only install updates to the software so that all data is not erased each time I need to update? Seems like this would be simple, but I can't figure out how to do it and am quite new to programming. I will eventually want to have the software check for updates online, but I need to understand how to update from a local file location first (without erasing current data).
I have a solution with more than one project and the main project contains buttons to open forms from different projects that are in the same solution. Say Project1 is the main project and Project2 is the different project that gives the following error when i compile it:
Error 3 'Sub Main' is declared more than once in 'SystemInformation': SystemInformation.Program.Main(), SystemInformation.My.MyApplication.Main(Args() As String) System Information II
I have already seen other threads with this question but it does not work for me because i have more than one project.For Project2: Application Framework is disabled and the startup object is "SubMain".
what methods use to update the main exe and related files in the app dir?
im using a seperate exe which runs with admin priviledge which downloads and replaces files as necessary.
my app downloads a text file and checks the version in that. if newer than settings.version then it runs the updator.exe and then closes.
the file downloaded also contains links to all new updates. the updator reads from this file then downloads as neccessary. then deletes the file and closes
I am considering a piece of code that will manage access to a collection object from multiple threads - add, update, remove, clear. OK ... so I have put a sync lock within each method, but what is not clear from the MS documentation is exactly how the sync lock is behaving. Is it locking the piece of code it wraps? Or is it locking the object? And if it is locking the object a private static object should lock out any code locked on the object within all instances of the object? i.e. if an add operation is underway, an update, delete or clear will wait for the lock to be released.
Finally, if I have multiple threads contending for the sync lock, how is the release managed? First come, first serve? random (from my p.o.v)? Is there a chance that two separate threads could blunder into 'locked' code simulataneously?
I am trying to write a thread safe application that contains 3 threads : -
1 - Data acquisition and decoding 2- Data graphing 3 - FFT and filtering
Thread 1 is collecting bytes from the serial port and converting them int integers (so taking two bytes) after is has captured 64 Bytes and converted into 32 integers, it then needs to pass the array to the graphing thread.
The graphing thread then plots the data and waits for more data.
Thread 3 also waits until thread one has collected 2023 integers and takes these and performs some FFT calculations (which take time).
My question is how do i share the arrays between the three threads without deadlocking the program? as the serial thread will be flying around reasonable fast (1000 bytes per second) so it will synclock onto the shared buffers for most of the time.
Originally i was going to use two synchronised queues, so when thread 1 has collected 32 bytes it queues the data into the graph queue, and once it has collected 2023 it queues the data into the FFT queue.
Then thread 2 and 3 can simple dequeue the data.
However using queues has the overhead of casting the data in and out, and as i know the data type i was planning on using two arrays :-
Dim GraphArray() as ushort Dim FFTArray() as ushort
Then Thread 1 adds data to each thread, and thread 2 and 3 simple wait until the correct amount of data is available before removing the data. my question is there an array type that allows me to remove x amount of data from an array?
Because i cannot do this easily with the ararys defined as above (GraphArray, FFTArray), as i was planning on making them 1mByte and allowing thread 1 to fill them Knowing they should never overflow and then let thread 2 and 3 remove x amout of bytes at a time unless there is a better way of doing it
Tried searching and found some related issues but none exactly like I was having I iterate thorugh a DGV and write to one of the fields of the row. After it writes this field, I do an update() command.
I am creating an application in vb.net in which many users can add, update, and modify data stored in sql, but one user at a time. Users have to login to the application and then they can start their work. I want to know how I can monitor their work after they log out, like which user updated the record and at which time.
I just noticed after adding the threads column in task manager to Win7 that a fresh new VS2005 project with single form and no code compiles and runs with 4 threads. Does anyone else notice this? Can anyone tell me why?
I just had a new, last-minute idea on to take on a task, so I am running to StackExchange for quick help.
What I want to do is execute a series of methods right in a row, each in their own threads. I want the application to wait until all of these threads are completed, after which the program will resume. It also has to use managed threading (thread pool).
What quick examples could you provide to help me along the way? If it's too complex, what things should I know about so that I can Google it on my own?
I have a main thread which is designed to be a batch processor - it spawns a series of 'child' threads from a loop (which can vary in terms of the no of items) - see below
[Code]...
However, each of the 'child' threads could take anywhere from milliseconds to about a minute to process - depending on the complexity of each calculation. There may also be a large number of child threads - e.g 100s. Creating large numbers of child threads is not efficient. I therefore want some way to effectively queue each child thread (and cancel if the process is taking too long to complete). Autoevents seems like one way of doing this, but the only examples I can find seem to assume there are two different processes on seperate threads, not one process being repeated.
Im making program that scrapes things from big url list, is it possible to make user set how many threads program uses to scape list faster? If its possible,
For each url as object in urllist.items Do something.Next If can be made into that, would be nice :P
How do I make my program create new threads from a set amount? For example if someone typed "60" in a textbox and they pressed "Start", it would create 60 threads that would do the same function.
I want to write my own global snippets tool for Windows XP and higher. This would be an always running in the background tool that would pop-up on a globally-defined hotkey, allow me to select a snippet with substitution arguments, and then paste the expanded snippet into the text input of whatever control I had been in when activated it, and finally, return me to that previous app/input box.
I know how to do most of the algorithmic aspects, but I do not know how to accomplish these windows-based features:
1 - Global Hotkey: how do I define a key-sequence in windows (from .net?) that will work, even when entering data in another apps textbox? (Usually this will be a browser window)
2 - Pasting Into Another App: I could use the paste-buffer and Ctrl-C, but I want to avoid the extra keystrokes.
3 - Return Control to Original Window: Seamlessly return back into my input stream: how do I do that? In fact, how does my tool even know where I was before it popped up?
The reasons that I want to write this myself is first to learn how (because there are other tools like this I would like to make) and secondly, I don't know of any snippets tools that have the argument substitution that I want.So, the two (2)questions are A) What should be my general approach? and B) how best can I accomplish items 1 to 3 above?
i need to create multiple threads to improve a function on my program. it is a simple thing really but it's slow and if multithreaded it can improve the speed some thousand times. my program uses a dll to check the MX record of an e-mail from a textbox called emails if the mx record is correct then it validates that domain, if not, it sends to an error textbox with that mail my problem is that im reading a lot on multithreading and i dont have an idea how to make something like this: for x=0 to emails.lines.count -1' start a thread that runs my function next if i can limit the number of threads to avoid crashing it would be good.
evrytime i add new controls to a form in vb.net the designer regenerates code and asks me to make corrections, so i have to keep on changing the object declarations to global using the 'global' keyword evertime it regenarates code,especialy dataset objects.how can i prevent this?