For one, it allows you to reduce the complexity of a big program by splitting it into many small and manageable pieces. These small programs can be developed and tested parallel, thus shortening development time. Many small programs also make a software system much more reliable than few large programs. E.g. if carefully implemented, all these programs could be microbootable, allowing your software system to automatically recover from failures. Many small programs also make a system much more scalable. E.g. functionality can be added by simply adding new programs. CPU power can be added by creating a distributed system. If the IPC you are using is LAN-capable (like the beWISE LAN product), then you can just add a new computers to your LAN and distribute all your programs on these computers. Last but not least, this approach allows you to tackle problems using sophisticated architectures like blackboard systems and multi-agent systems.

The main reason why IPC is beneficial is because you can have multiple independent programs working together, acting like one big program. This approach has many benefits (see the question below for an explanation of these benefits). Another reason why you may consider using IPC is the integration of legacy software. Letís assume you have an existing program (EXE file), written in C, that has been developed years ago and that is running since without any major problems. Now you need to make this C program (or itís functionality) part of a new system. You plan to write this new system completely in VB.NET. But how do you get the functionality of the ílegacyí program into your new VB.NET project? Well, there are of course different ways you can go about that. You could completely re-write the old functionality in VB.NET; or you could try to migrate the C program to C# and integrate it with your VB.NET code. You could also try to convert the program into a DLL and call that DLL from within VB.NET; or you could leave the C program as it is and íremote controlí it using IPC. If you donít want to fiddle too much with the source code of the old C program, and if the structure of the C program allows for it, leave the program as it is and just add IPC capabilities to it. That may be the least intrusive method in many cases. Once your C program has an IPC interface, your new VB.NET applications will be able to talk to it and to remote control it.

beWISE does that by providing two classical methods of IPC (Inter-Process Communication); shared memory and message passing. We call them beWISE VARIABLES (sometimes also Shared Variables) and beWISE PIPES (named pipes). Although operating systems like Windows and Unix provide APIs that allow you to utilize shared memory and message passing, it is often a very painstaking process to implement Inter-Process Communication using these low level APIs. Not only do you have to know the API well, but you also have to consider things like resource sharing, priority inversion and deadlocks. beWISE takes away that pain from you by providing an easy-to-use interface that takes care of all these problems.

Frequently Asked Questions

The beWISE product consists of a DLL and a few essential background tasks that provide Inter-Process Communication (IPC) capabilities for your Visual Basic programs.† In other words, beWISE makes it very easy for your Visual Basic programs to talk to each other.

What exactly is the beWISE product?

How does beWISE enable my Visual Basic programs to talk to each other?

Why would I want my programs to communicate - why do I need IPC at all?

Why is it beneficial having multiple smaller programs instead of one large program?

In our Forum we provide more technical information regarding multitasking and IPC. We also discuss there best practices for using beWISE Variables and Pipes. If you donít find answers to your questions right now, post a request and we will try to answer it.† As we are just getting started with our forum, there may not be a lot of information right now. Please be patient and give us some time. We are working hard to provide all the information that you need to successfully build state-of-the-art multitasking systems.

I have more questions regarding multitasking, IPC and beWISE. Where can I get answers?

beWISE VARIABLES are available to ALL programs at the same time. Every program can read and update their values. Communicating via beWISE VARIABLES is like communicating via radioó everyone can hear what everybody else is saying. But if you are not paying attention you may miss radio calls from others. In other words, if your program is busy and cannot process Changed Events, it may miss some of these events. But it will definitely always receive the latest event and get the latest value for each variable.

A beWISE PIPE is more like a messaging service. Messages can be passed only in one direction (unidirectional). One program (the RECEIVER) owns the pipe, other programs (SENDERS) can send massages into this pipe. Itís not unlike text messaging on your mobile phone. Everyone who knows your number (knows the name of the pipe) can SEND you a message. But while many people can send you a message, you are the only one receiving these messages (of courseó itís your mobile phone). Others (other programs) receive messages only if they also have mobile phones (pipes) and someone sends messages to them. And of course you need to know their number (names of the other pipes) to send them messages. If you want to send a message to 5 different people (5 different programs), then you have to send this message 5 times. Each time using the appropriate phone number (appropriate pipe). The beauty of pipes is, that you get all the messages from all this different people in chronological order (FIFO). And you have time to pick them up (e.g. when your program is idle). Even when you canít process them immediately, you will not lose any message unless your message buffer gets full (i.e. when pipe has an overflow condition). To avoid that, you can try to pick up your messages faster. If that does not work you can increase the size of your message box (increase the number of slots your pipe can hold). In addition you may also limit the number of people that can send you messages (limit the number of possible sender tasks for your pipe).

What is the difference between beWISE VARIABLES and beWISE PIPES?

The Essential Resource for Visual Basic Developers