text:
Patent US5951653 - Method and system for coordinating access to objects of different thread ... - Google PatentsSearch Images Maps Play YouTube News Gmail Drive More »Sign inPatentsA computer-based method and system for accessing objects of different thread types in a single process. The system provides single-threaded apartments (STAs) for loading apartment-threaded objects and a multi-threaded apartment (MTA) for loading free-threaded objects. Each STA has a single thread, and...http://www.google.com/patents/US5951653?utm_source=gb-gplus-sharePatent US5951653 - Method and system for coordinating access to objects of different thread types in a shared memory spaceAdvanced Patent SearchTry the new Google Patents, with machine-classified Google Scholar results, and Japanese and South Korean patents.Publication numberUS5951653 APublication typeGrantApplication numberUS 08/790,295Publication dateSep 14, 1999Filing dateJan 29, 1997Priority dateJan 29, 1997Fee statusPaidPublication number08790295, 790295, US 5951653 A, US 5951653A, US-A-5951653, US5951653 A, US5951653AInventorsRichard D. Hill, Alexander A. MitchellOriginal AssigneeMicrosoft CorporationExport CitationBiBTeX, EndNote, RefManPatent Citations (5), Non-Patent Citations (10), Referenced by (50), Classifications (5), Legal Events (5) External Links: USPTO, USPTO Assignment, EspacenetMethod and system for coordinating access to objects of different thread types in a shared memory space
US 5951653 AAbstract
A computer-based method and system for accessing objects of different thread types in a single process. The system provides single-threaded apartments (STAs) for loading apartment-threaded objects and a multi-threaded apartment (MTA) for loading free-threaded objects. Each STA has a single thread, and the MTA has multiple threads. When an STA thread requests to access a free-threaded object, the system creates an MTA thread and requests the MTA thread to instantiate the free-threaded object. The STA thread then receives a marshalled pointer to the free-threaded object and unmarshals the received pointer. The STA thread then accesses the free-threaded object using the unmarshalled pointer so that the MTA thread accesses the free-threaded object on behalf of the STA thread. When an MTA thread requests access to an apartment-threaded object, the system creates an STA thread and requests the STA thread to instantiate the apartment-threaded object. The MTA thread then receives a marshalled pointer to the apartment threaded object and unmarshals the received pointer. The MTA thread then accesses the apartment-threaded object using the unmarshalled pointer so that the STA thread accesses the apartment-threaded object on behalf of the MTA thread.
1. A method in a computer system for accessing objects of different thread types in a single process, the method comprising:during execution of a single-threaded apartment (STA) thread,requesting access to a free-threaded object; and in response to the request to access a free threaded object,creating a multi-threaded apartment (MTA) thread; requesting the MTA thread to instantiate the free threaded object; receiving a marshalled pointer to the free-threaded object; unmarshalling the received pointer; and accessing the instantiated free-threaded object using the unmarshalled pointer wherein an MTA thread accesses the free-threaded object on behalf of the STA thread; and during execution of an MTA thread,requesting access to an apartment-threaded object; and in response to the request to access an apartment-threaded object,creating an STA thread; requesting the STA thread to instantiate the apartment-threaded object; receiving a marshalled pointer to the apartmnent-threaded object; unmarshalling the received pointer; and accessing the instantiated apartment-threaded object using the unmarshalled pointer wherein the STA thread accesses the apartment-threaded object on behalf of the MTA thread. 2. A method in a computer system for accessing a free-threaded object from a single-threaded apartment thread (STA) thread, the method comprising:during execution of the STA thread,requesting access to the free-threaded object; and in response to the request to access a free-threaded object,selecting a multi-threaded apartment (MTA) thread for accessing the object; requesting the selected MTA thread to access the free-threaded object on behalf of the STA thread; dispatching messages received while the MTA thread is accessing the free-threaded object; and receiving notification that the MTA thread has completed accessing the free-threaded object. 3. The method of claim 2 wherein the selecting of an MTA thread includes creating an MTA thread.
4. The method of claim 2 wherein the selecting of an MTA thread selects an already created thread.
5. The method of claim 2 including before requesting access to the free-threaded object, receiving a marshalled pointer to the free-threaded object and unmarshalling the pointer and wherein the requesting of access to the free-threaded object uses the unmarshalled pointer.
6. The method of claim 2 including when the free-threaded object has not been instantiated, requesting the MTA thread to instantiate the free-threaded object wherein the MTA thread provides the STA thread with a marshalled pointer to the free-threaded object.
7. The method of claim 6 wherein the STA thread unmarshals the pointer and requests access to the free-threaded object using the unmarshalled pointer.
8. The method of claim 2 wherein the requesting of the selected MTA thread includes switching to the MTA thread.
9. A method in a computer system for accessing an apartment-threaded object from a multi-threaded apartment (MTA) thread, the method comprising:during execution of the MTA thread,requesting access to the apartment-threaded object; and in response to the request to access the apartment-threaded object,selecting a single-threaded apartment (STA) thread to access the object; requesting the selected STA thread to access the apartment threaded object on behalf of the MTA thread; suspending execution while the STA thread is accessing the apartment-threaded object; and resuming execution when notified that the STA thread has completed accessing the apartment-threaded object. 10. The method of claim 9 wherein the selecting of an STA thread selects an already created thread.
11. The method of claim 9 wherein when the apartment-threaded object is a main-threaded object, then the selecting selects the main STA thread.
12. The method of claim 9 including before requesting access to the apartment-threaded object, receiving a marshalled pointer to the apartment-threaded object, and unmarshalling the pointer and wherein the requesting of access to the apartment-threaded object uses the unmarshalled pointer.
13. The method of claim 9 including when the apartment-threaded object has not been instantiated, requesting the STA thread to instantiate the apartment-threaded object wherein the STA thread provides the MTA thread with a marshalled pointer to the apartment-threaded object.
14. The method of claim 9 wherein the MTA thread unmarshals the pointer and requests access to the apartment-threaded object using the unmarshalled pointer.
15. A method in a computer system for providing access to apartment-threaded objects and free-threaded objects in memory shared by multiple threads, the method comprising:creating a single-threaded apartment having a single-threaded apartment (STA) thread, each apartment object being loaded into the single-threaded apartment; creating a multi-threaded apartment having multiple multi-threaded apartment (MTA) threads, each free-threaded object being loaded into the multi-threaded apartment; when the STA thread requests to access a free-threaded object, accessing the free-threaded object from a selected MTA thread on behalf of the STA thread; and when a MTA thread requests to accesses an apartment-threaded object, accessing the apartment threaded object from the STA thread on behalf of the MTA thread. 16. The method of claim 15 wherein the STA thread dispatches messages while the MTA thread is accessing the free-threaded object.
17. The method of claim 15 wherein the MTA thread suspends while the STA thread is accessing the apartment-threaded object.
18. The method of claim 15 wherein the STA thread provides a pointer to a marshalled host object and wherein the MTA thread unmarshals the pointer to the host object and invokes a method of the host object to instantiate an apartment-threaded object and to return a marshalled pointer to the instantiated object.
19. The method of claim 18 wherein the MTA thread unmarshals the pointer to the instantiated object and uses the unmarshalled pointer to request access to the instantiated object.
20. The method of claim 15 wherein an MTA thread provides a pointer to a marshalled host object and wherein the STA thread unmarshals the pointer to the host object and invokes a method of the host object to instantiate a free-threaded object and to return a marshalled pointer to the instantiated object.
21. The method of claim 20 wherein the STA thread unmarshals the pointer to the instantiated object and uses the unmarshalled pointer to request access to the instantiated object.
22. A computer-readable medium containing instructions for causing a computer system to provide access to apartment-threaded objects and free-threaded objects in memory shared by multiple threads, by:creating a single-threaded apartment having a single-threaded apartment (STA) thread, each apartment object being loaded into the single threaded apartment; creating a multi-threaded apartment having multiple multi-threaded apartment (MTA) threads, each free-threaded object being loaded into the multi-threaded apartment; when the STA thread requests to access a free-threaded object, creating an MTA thread and accessing the free-threaded object from created MTA thread on behalf of the STA thread; and when a MTA thread requests to accesses an apartment-threaded object, accessing the apartment threaded object from the STA thread on behalf of the MTA thread. 23. The computer-readable medium of claim 22 wherein the STA thread dispatches messages while the MTA thread is accessing the free-threaded object.
24. The computer-readable medium of claim 22 wherein the MTA thread suspends while the STA thread is accessing the apartment-threaded object.
25. The computer-readable medium of claim 22 wherein the STA thread provides a pointer to a marshalled host object and wherein the MTA thread unmarshals the pointer to the host object and invokes a method of the host object to instantiate an apartment-threaded object and to return a marshalled pointer to the instantiated object.
26. The computer-readable medium of claim 25 wherein the MTA thread unmarshals the pointer to the instantiated object and uses the unmarshalled pointer to request access to the instantiated object.
27. The computer-readable medium of claim 22 wherein an MTA thread provides a pointer to a marshalled host object and wherein the STA thread unmarshals the pointer to the host object and invokes a method of the host object to instantiate a free-threaded object and to return a marshalled pointer to the instantiated object.
28. The computer-readable medium of claim 27 wherein the STA thread unmarshals the pointer to the instantiated object and uses the unmarshalled pointer to request access to the instantiated object.
The present invention relates generally to accessing objects in a computer system and more particularly to coordinating access to objects among multiple threads.
Most computer systems execute under the control of a multiprocessing operating system. A multiprocessing operating system is designed to control the concurrent execution of multiple computer programs. Such operating systems typically allow one program to execute for a while, and then allow another computer program to execute. Before each computer program is allowed to execute, the operating system initializes the system resources (e.g., is CPU registers) to their state when that computer program last executed and, if necessary, loads the computer program back into memory. Thus, when the computer program is allowed to execute again, its execution continues where it left off. Each executing computer program is generally referred to as a "process," and the state of the computer system when that computer program executes is referred to as the "context" of the process.
Computer programs that are executing concurrently may have the need to communicate with each other. A computer application may be implemented as multiple cooperating computer programs that each execute as separate processes. One computer program may request another computer program to perform a certain function on its behalf. Each time the operating system allows a different computer program to execute, the operating system performs what is referred to as a process context switch. The context switch involves saving the current state of the executing process so that it can continue execution at a later time, and restoring the previous state of the computer program to be executed. The saving and restoring of the contexts may place an unacceptable overhead on the computer system. To avoid the overhead of process context switching, some operating systems have implemented the concept of a lightweight process or a thread. Within a single process, the operating system may allow several threads to execute concurrently. Each thread in a process shares the same address space (i.e., code and data), but each thread has its own program counter and other register values. The operating system allows each thread in the process to execute for a while and then switches control to the next thread. Because the threads share the same address space, the context switching from one thread to another can be accomplished much faster than switching from one process to another. Thus, the concept of multithreading allows many of the advantages of multiprocessing, but without the overhead of process context switches.
Many server computer programs (i.e., servers) that provide services to multiple client computer programs (i.e., clients) are implemented using multiple threads. When a client requests the server to perform a service on behalf of the client, the server will create a thread to provide that service for the client. Thus, when multiple clients request services at approximately the same time, the server will be executing many threads. The data that a process accesses is often organized into objects that encapsulate data and code for accessing that data. Because the threads within a process share the same data, access control to the data must be coordinated by the threads. With such a multithreading server, the developer of the server is responsible for coordinating access to the objects so that the processing by one thread will not be interfered with by another thread. For example, the developer may need to ensure that appropriate synchronization mechanism (e.g., locks and semaphores) are defined for each object. A synchronization problem could occur when two threads attempt to access an object concurrently. For example, if both threads A and B need to modify the same object, then a synchronization problem could occur in the following way. When the object provides a method to increment a data member, the method may load the value of the data member into a register, increment the value, and store the value back into the data member. However, if thread A invokes the method, the current value (e.g., 10) of the data member may get loaded into a register and then a thread context switch may occur so that thread B executes. If thread B also invokes the method, the current value (e.g., 10) of the data member would be loaded into a register, incremented (e.g., 11), and stored back into the data member. When thread A again executes, it resumes execution of the method. In this case, the value (i.e., 10) in its register is incremented (e.g., 11) and stored back into the data member. Thus, after execution of the method by both threads the data member will have a value of 11 rather than the expected value of 12. It may take a considerable amount of programming to develop a computer program that avoids various synchronization problems. The synchronization problems also occur when multiple processes, even with only one thread each, access shared memory. Thus, in general the problems occur when any threads, regardless of whether they are in the same or different processes, access objects in shared memory.
To help simplify development of such objects, an apartment model has been developed. According to the apartment model, each object can only be accessed by the single thread. Because each object can only be accessed by a single thread no synchronization problems occur as a result of multiple threads accessing the object concurrently. That is, the single thread can serially process each request to access the object. Thus, when a thread wants to access an object, it requests that the thread for the object perform the function on behalf of the requesting thread. The group of objects that can be accessed by a thread is referred to as an apartment. The apartment model is described in U.S. patent Ser. No. 08/381,635, entitled "Method and System for Multi-Threaded Processing," which is hereby incorporated by reference. A preferred technique for sending the request from one thread to another is referred to as marshalling and described in U.S. patent Ser. No. 5,511,197, entitled "Method and System for Network Marshalling of Interface Pointers for Remote Procedure Calls," which is hereby incorporated by reference.
When a programmer is developing a new object, the programmer needs to make a decision as to whether the object will be accessed only by a single thread or by multiple threads. If the object is to be accessed only by a single thread (i.e., an apartment-threaded object), then the implementation of the lo object is fairly straightforward because synchronization problems can be avoided by serializing access. Conversely, if the object is to be accessed by multiple threads (i.e., a free-threaded object), then the appropriate synchronization management mechanisms need to be developed. Unfortunately, apartment-threaded objects cannot be accessed by a server developed to access objects from any thread, and vice versa. When free-threaded objects are being used, a server is developed to simply pass pointers to the objects from one thread to another thread. The receiving thread would access the object directly, regardless of which thread created the object. Thus, if such a server loaded an apartment-threaded object, synchronization problems may occur as multiple threads accessed the object concurrently. Similarly, if a free-threaded object were executed in an apartment thread, the object may block in a manner that would cause the apartment to deadlock. Consequently, each class of object has an associated thread type. The thread type of the class can be either apartment-threaded or free-threaded. If a server is developed to use the apartment model, the server cannot instantiate free-threaded objects. Conversely, if the server is developed to use the free-threaded objects (i.e., a free-threading model), then the process cannot instantiate apartment-threaded objects. Two other thread types can be defined: single-threaded objects and both-threaded objects. A single-threaded object (referred to as a main-threaded object in the following) is an apartment-threaded object that can only be loaded into the apartment for the main thread of the process. A both-threaded object is compatible with both the apartment model and the free-threading model and thus can be loaded by a process that uses either model.
Although the apartment model does simplify the development of objects, the model has several drawbacks. First, if the computer has multiple processors, then the object can only be accessed by the processor that is executing the single thread and the other processors may be idle. Conversely, with the free-threaded objects, each thread that is accessing an object may be executing simultaneously on separate processors. Second, remote procedure call (RPC) mechanisms typically provide a dedicated thread for receiving calls from other processes. Thus, a thread context switch from the dedicated thread to the single thread may be needed. Conversely, a free-threaded object could execute in the dedicated thread. Third, because requests are nested, rather than queued, it may be that a first request is never completely serviced. That is, the last request received is serviced before the previously received requests are serviced. For example, when thread A is executing a method that was called from another thread, it may call a method in thread B, which in turn calls a method in thread A. If thread A did not process the second call when it was received, then the first call would never complete. However, if a first client calls a method in thread A, and many other clients call methods in thread A before the call by the first process completes, then the call by the first client may never complete because the thread is busy executing subsequent calls. Conversely, the threads with the free-threaded objects execute independently.
The present invention provides a method and system for providing access to apartment-threaded objects and free-threaded objects in memory shared by multiple threads. The system creates a single-threaded apartment that has a single-threaded apartment (STA) thread. The system loads each apartmentthreaded object into the single-threaded apartment. The system also creates a multi-threaded apartment that has one or more multi-threaded apartment (MTA) threads. The system loads each free-threaded object into the multi-threaded apartment. When the STA thread requests to access a free-threaded object, the system creates an MTA thread (or reactivates a deactivated thread) and requests that the MTA thread access the free-threaded object. The MTA thread then accesses the free-threaded object on behalf of the STA thread. When an MTA thread requests to access an apartment-threaded object, the system requests the STA thread to access the apartment-threaded object. The STA thread then accesses the apartment-threaded object from the STA thread on behalf of the MTA thread.
In another aspect of the present invention, both the MTA and the STA provide a host object through which objects can be instantiated in their respective apartments. Marshalled pointers to the host objects are placed in shared memory so that any thread can access the marshalled pointers. When an STA thread is to load a free-threaded object, the STA thread unmarshals the pointer for the host object of the MTA. The STA thread then invokes a method of the host object of the MTA. That invocation is sent to an MTA thread. The MTA host object instantiates the free-threaded object and returns a marshalled pointer to the instantiated object. When the STA thread receives the marshalled pointer, it unmarshals the pointer and uses the pointer to access the instantiated object. The instantiated object is accessed by requesting an MTA thread to access the instantiated object on behalf of the STA thread. When an MTA thread is to load an apartment-threaded object, then an analogous process occurs.
FIG. 1 is a block diagram illustrating the mixing of objects of different types in a single process.
FIG. 2 is a block diagram illustrating marshalling techniques used in the present invention.
FIG. 3 is a block diagram illustrating a computer system for practicing the present invention.
FIG. 4a is a flow diagram of an implementation of the CoCreateinstance function.
FIG. 4b is a flow diagram of an implementation of the CoGetClassObject function.
FIG. 5 is a flow diagram of a portion of the message loop for the main STA thread of the process.
FIG. 6 is flow diagram of the routine to create the host object in the main STA thread.
FIG. 7 is a flow diagram of the initialization process of an STA thread.
FIG. 8 is a flow diagram of the routine to initialize an MTA thread.
FIG. 9 is a flow diagram of the channel processing when an apartment-threaded object is accessed.
FIG. 10 is a flow diagram of the channel processing when a free-threaded object is accessed.
FIG. 11 is a flow diagram of a stub routine.
The present invention provides a method and system that allows apartment-threaded objects and free-threaded objects to be loaded into memory shared by multiple threads in a manner that is transparent to the application programs. The mixed threading system (MTS) of the present invention supports multiple single-threaded apartments and one multi-threaded apartment in the shared memory. The MTS loads apartment-threaded objects into a single-threaded apartment and loads free-threaded objects into the multi-threaded apartment. Each single-threaded apartment is executed by a corresponding single-threaded apartment (STA) thread, and the multi-threaded apartment is executed by multiple multi-thread apartment (MTA) threads. When a thread requests to load an object, the MTS determines into which apartment the object should be loaded (i.e., free-threaded objects are loaded into the MTA and apartmnent-threaded objects are loaded into an STA, main-thread objects are loaded into the main STA thread, and both thread objects are loaded into the current thread). If the requesting thread matches the thread type of the object (e.g., an apartment-thread object and STA thread or a free-threaded object and an MTA thread), then the object is loaded into the apartment of the requesting thread. Thus, when the loaded object is then accessed by the requesting thread, it accesses the object directly from that thread. If, however, the requesting thread does not match the thread type of the object, then the MTS requests a thread that matches the thread type to load the object into its apartment and provides the requesting thread with a marshalled interface pointer to the object. Thus, whenever the loaded object is accessed by the requesting thread, then it is accessed using the marshalled interface pointer so that a thread context switch occurs so that the object can be executed by a thread in the appropriate apartment.
The MTS handles the accessing of an object through a marshalled interface pointer differently for each type of thread. If a thread uses a marshalled interface pointer to access an apartment-threaded object, then the MTS switches to the thread for that apartment to access the object on behalf of the requesting thread. If an STA thread uses a marshalled interface pointer to access a free-threaded object, then the MTS creates a new MTA thread and requests that the newly created thread access the object on behalf of the requesting STA thread. After the access is complete, then the MTA thread can be destroyed (or released to a pool of deactivated threads). Whenever an STA thread uses a marshalled interface pointer to access an object, then the thread enters a loop dispatching messages while the other thread accesses the object. Whenever an MTA thread uses a marshalled interface pointer to access an object, then the thread waits until the access is complete.
FIG. 1 is a block diagram illustrating the mixing of objects of different thread types in a single process. Although the description below refers to threads in a single process, the techniques of the present invention may be used with threads in different processes that share memory. The process has a global area 101, multi-threaded apartment (MTA) 102 with three threads 102a, 102b, 102c, and three single-threaded apartments (STA) for threads 103a, 103b, 103c. The MTS keeps track of the apartments and threads. Three threads are designated as host threads: host STA thread 103b; main STA thread 103a; and host MTA thread 102c. The host threads provide access to a host object that controls the instantiation of objects. When one thread requests an object to be instantiated that needs to be in a different apartment, the MTS retrieves from the global area a marshalled interface pointer to the host object for the apartment in which the object is to be created. The MTS unmarshals the interface pointer and invokes a method of the host object to instantiate the object. The host object instantiates the object and returns a marshalled interface to the instantiated object. The requesting thread then unmarshals the interface pointer and uses it to access the object.
FIG. 2 is a block diagram illustrating marshalling techniques used in the present invention. When a pointer to an interface is passed from one thread (i.e., a server thread) 202 to another thread (i.e., a client thread) 201, the MTS creates proxy and stub objects to control the inter-thread invoking of the methods. The proxy object 201a is instantiated within the client thread and contains an implementation of the same interface (e.g., IObject) that the object 202c exposes. When the client thread invokes a method of the proxy object, the proxy object marshals the parameters of the method and passes the request to invoke that method to the channel object 201b. The channel object contains the network address of the corresponding server channel object 202b. The channel object may need to create a server thread to process the request. The channel object forwards the request to the server thread. The channel object on the server thread forwards the request to invoke the method to the stub object 202a. The stub object unmarshals the parameters of the message and invokes the corresponding method of the object 202c. When the method returns, the stub object packages the return parameters and forwards them to the channel object 202b. The channel object then sends that message to the channel object 201b. The channel object forwards the message to the proxy object which unmarshals the parameters and returns to the client.
FIG. 3 is a block diagram illustrating a computer system for practicing the present invention. The computer system 300 includes primary storage 301, a central processing unit (CPU) 302, and an I/O interface 303. The primary storage contains a multi-threaded computer program 304, a CoCreatelnstance function 305, a channel interface 306, a system registry 307, and loaded dynamic link libraries (DLL) 308. The computer program invokes the CoCreatelnstance function to instantiate an object of a certain class. The function determines from the registry the name of the DLL that contains the code for that class and the thread type of that class (e.g., free-threaded). The function loads the DLL and effects the instantiation of that object in the appropriate apartment. The function then returns an interface pointer that points either directly to the object or to a proxy for the object. When the proxy is invoked, the channel code effects the invoking of the method by the appropriate thread.
FIG. 4a is a flow diagram of an implementation of CoCreatelnstance function. The CoCreateinstance function is passed the identifier of a class and the identifier of an interface supported by that class. The function instantiates an object of that class and returns a pointer to the interface for that object. In step 401a, the function invokes the CoGetClassObject function passing the identifier of the class and the identifier of the class factory interface. The class factory interface provides a method for creating instances of objects. In step 402a, the function invokes the method Createlnstance of the returned class factory passing the identifier of the interface for the object. The method creates an instance of the object and returns a pointer to interface. The function then returns.
FIG. 4b is a flow diagram of an implementation of the CoGetClassObject function. The CoGetClassObject function is passed the identifier of a class and returns a pointer to the class factory interface for that class. In step 401b, the function checks the global registry to identify the dynamic link library (DLL) that contains the code for the identified class. If the DLL for the class is not already loaded, then the function loads the DLL. In step 402b, the function retrieves the thread type of the class from the registry. In step 403b, the function retrieves a reference to the DLLGetClassObject function in is the loaded DLL. In step 404b, the function determines whether the object can be created in the current apartment. If the object can be created in the current apartment, then the function continues at step 405b, else the function continues at step 412b. The object can be instantiated in the current apartment in the following circumstances:
(1) the thread type of the class is both-threaded;
(2) the thread type of the class is apartment-threaded (but not main-threaded) and the current apartment is an STA;
(3) The thread type of the class is free-threaded and the current apartment is the MTA; and
(4) the thread type of the class is main-threaded and the current apartment is the main STA.
In step 405b, the function invokes the DLLGetClassObject function to instantiate the class factory in the current apartment and returns a pointer to the class factory. In step 412b, if the host object has been marshalled, then the function continues at step 410b, else the function continues at step 406b. In steps 406b-411b, the function causes the class factory to be created in another apartment that matches the thread type. In step 406b, if the thread type of the class is main-threaded, then the function continues at step 407b, else the function continues at step 408b. In step 407b, the function sends a message to the main STA thread to instantiate the class factory. The sending of the message is synchronized in that control does not return until the message has been processed by the main STA thread. In step 408b, the function creates a thread in an apartment for the class factory. In step 409b, the function waits on an event to signal the completion of the creation of the thread. In step 410b, the function unmarshals the host pointer that the created thread stored in the global memory. In step 411b, the function invokes the method GetClassObject of the host object to create the class factory and to retrieve a marshalled pointer to the class factory. The function then returns a pointer to the proxy class factory after unmarshalling the pointer.
FIG. 5 is a flow diagram of a portion of the message loop for the main STA thread of the process. The main STA thread receives messages to instantiate apartment-threaded objects within its apartment. In step 501, the message loop retrieves the next message. In step 502, if the message indicates that an object is to be created, then the message loop continues at step 503, else the message loop continues its normal processing for messages. In step 503, the message invokes the routine to create an object for the main thread.
FIG. 6 is flow diagram of the routine to create an object in the main STA thread. In step 601, if the host object for the main STA thread has already been created, then the routine skips to step 604, else the routine continues at step 602. In step 602, the routine creates the host object. In step 603, the routine marshals a pointer to the host object to an area of global memory. In step 604, the routine sends a reply message and returns.
FIG. 7 is a flow diagram of the initialization process of an (non-main) STA thread. When a thread is initialized, it performs this process if it is a non-main STA thread. In step 701, the routine invokes the function ColnitializeEx indicating that an STA thread is being initialized. The function ColnitializeEx tracks the threads so that the requests to access objects can be sent to the appropriate thread. In step 702, if the host object for the STAs has already been created, then the routine skips to step 705, else the routine continues at step 703. In step 703, the routine creates the host object for the non-main STA threads. In step 704, the routine marshals the pointer to the host object to global memory. In step 705, the routine sets the event to indicate that the pointer to the host object is in global memory. The setting of this event notifies the client thread that the pointer to the host object is in global memory. In step 706, the routine goes to the message loop for the apartment thread.
FIG. 8 is a flow diagram of the routine to initialize an MTA thread. In step 801, the routine invokes the function ColnitializeEx indicating that an MTA thread is being initialized. In step 802, if the host object for the MTA has already been created, then the routine skips to step 805, else the routine continues at step 803. In step 803, the routine creates the host object for the free threads. In step 804, the routine marshals a pointer to the host object to the global memory. In step 805, the routine sets the event to indicate that the pointer to the host object is in global memory. In step 806, the routine blocks on an event to keep the thread alive until the process uninitializes. In step 807, the routine invokes the function CoUninitialize to uninitialize the thread and returns.
FIG. 9 is a flow diagram of the channel processing when the object is in an STA. In step 901, the routine posts a message to the thread for the apartment that contains the object. In step 902, if the current thread is an MTA thread then the routine continues at step 903, else the routine continues at step 904. In step 903, the routine waits until the event is set by the thread that processed the request. An MTA thread suspends until the event is set. In steps 904-905, the routine loops dispatching messages and checking the event. An STA thread needs to continue dispatching messages in case the object that is invoked accesses an object that can only be accessed through this thread. In step 904, the routine dispatches any messages on the message loop. In step 905, if the event has been set, then the routine continues in step 906, else the routine loops to step 905. In step 906, the routine processes the reply and returns.
FIG. 10 is a block diagram of the channel processing when the object is in the MTA. In step 1001, the function creates an MTA thread or allocates an MTA thread from a pool of available threads. In step 1002, the routine sets an event to wake the thread to process the request. In steps 1003-1004, the routine loops dispatching messages and checking for the event. Only an STA thread will access a free-threaded object using marshalling. (Any MTA thread can access any free-threaded object directly.) Therefore, the messages for the STA threads are dispatched. In step 1003, the routine dispatches any messages. In step 1004, if the event is set, then the routine continues in step 1005, else the routine loops to step 1003. In step 1005, the routine processes the reply message and returns.
FIG. 11 is a flow diagram of a stub routine. In step 1101, the stub routine unmarshals the message provided by the channel. In step 1102, the stub invokes the method of the object. In step 1103, the stub marshals any return parameters into a reply and forwards them to the channel and returns. The channel then forwards the reply and sets the event.
Although the present invention has been described in terms of a preferred embodiment, it is not intended that the invention be limited to this embodiment. Modifications within the spirit of the invention will be apparent to those skilled in the art. The scope of the present invention is defined by the claims that follow.
Patent CitationsCited PatentFiling datePublication dateApplicantTitleUS5430876 *Jun 24, 1993Jul 4, 1995Digital Equipment CorporationRemote procedure callback system and methodUS5452459 *Jan 8, 1993Sep 19, 1995Digital Equipment CorporationMethod and apparatus for allocating server access in a distributed computing environmentUS5463625 *Oct 1, 1993Oct 31, 1995International Business Machines CorporationHigh performance machine for switched communications in a heterogeneous data processing network gatewayUS5596579 *Jun 5, 1995Jan 21, 1997International Business Machines CorporationHigh performance machine for switched communications in a heterogeneous data processing network gatewayUS5787281 *Apr 28, 1995Jul 28, 1998Digital Equipment CorporationComputer network providing transparent operation on a compute server and associated method* Cited by examinerNon-Patent CitationsReference1"Descriptions and Workings of OLE Threading Models," in Knowledge Base, Microsoft Developer Network Library, Apr. 1997, Article ID: Q150777.2"OLE 2 Programmer's Reference--Working with Windows™ Objects," Microsoft Corporation, vol. One, Chapter 1, 1994, pp. 3-29.3Brockschmidt, Kraig, "Inside OLE,", Microsoft Corporation, Second Edition, Chapter 6, 1995, pp. 277-338.4 *Brockschmidt, Kraig, Inside OLE, , Microsoft Corporation , Second Edition, Chapter 6, 1995, pp. 277 338.5 *Descriptions and Workings of OLE Threading Models, in Knowledge Base , Microsoft Developer Network Library, Apr. 1997, Article ID: Q150777.6Karuzis, M., "Supporting Threadless DCE Clients," rfc31.0.txt at www.pilgrim.umass.edu, Oct. 29, 1996, pp. 1-8.7 *Karuzis, M., Supporting Threadless DCE Clients, rfc31.0.txt at www.pilgrim.umass.edu, Oct. 29, 1996, pp. 1 8.8 *OLE 2 Programmer s Reference Working with Windows Objects, Microsoft Corporation , vol. One, Chapter 1, 1994, pp. 3 29.9Salz, R., "DCE 1.2 Contents Overview," rfc63.3.txt at www.pilgrim.umass.edu, Oct. 29, 1996, pp. 1-14.10 *Salz, R., DCE 1.2 Contents Overview, rfc63.3.txt at www.pilgrim.umass.edu, Oct. 29, 1996, pp. 1 14.* Cited by examinerReferenced byCiting PatentFiling datePublication dateApplicantTitleUS6173309 *Feb 20, 1997Jan 9, 2001Hewlett-Packard CompanyNull thread library and thread abstraction interfaceUS6260077 *Oct 24, 1997Jul 10, 2001Sun Microsystems, Inc.Method, apparatus and program product for interfacing a multi-threaded, client-based API to a single-threaded, server-based APIUS6409602 *Nov 24, 1998Jun 25, 2002New Millenium Gaming LimitedSlim terminal gaming systemUS6421721 *Mar 16, 1999Jul 16, 2002International Business Machines Corporation,Controlling device access in a networkUS6691118 *Oct 31, 1997Feb 10, 2004Oracle International CorporationContext management system for modular software architectureUS6826752 *Dec 14, 1999Nov 30, 2004California Institute Of TechnologyProgramming system and thread synchronization mechanisms for the development of selectively sequential and multithreaded computer programsUS6898617 *Nov 18, 1999May 24, 2005International Business Machines CorporationMethod, system and program products for managing thread pools of a computing environment to avoid deadlock situations by dynamically altering eligible thread poolsUS6981255Dec 26, 2001Dec 27, 2005Microsoft CorporationMethod and system for accessing objects of different thread typesUS6981267 *Jun 16, 2000Dec 27, 2005Microsoft CorporationSystem and method for parallel asynchronous execution of commandsUS6996826Dec 26, 2001Feb 7, 2006Microsoft CorporationMethod and system for accessing objects of different thread typesUS7189161Feb 21, 2002Mar 13, 2007New Millenium Gaming LimitedSlim terminal gaming systemUS7299470 *Sep 13, 2001Nov 20, 2007International Business Machines CorporationMethod and system for regulating communication traffic using a limiter threadUS7299471 *Apr 17, 2002Nov 20, 2007International Business Machines CorporationCommon thread serverUS7519868 *Dec 9, 2005Apr 14, 2009Canon Kabushiki KaishaInformation processing apparatus, information processing method, computer program, and storage mediumUS7555755 *Jun 30, 2009John FairweatherSystem and method for navigating dataUS7584473 *Oct 31, 2007Sep 1, 2009Microsoft CorporationHighly componentized system architecture with loadable virtual memory managerUS7743392Jun 22, 2010Microsoft CorporationSystem and method for parallel asynchronous execution of commandsUS7753773Aug 26, 2005Jul 13, 2010IgtGaming device having physical concentric symbol generators which are operable to provide a plurality of different games to a playerUS7837560Nov 23, 2010Wiltshire Michael SSlim terminal gaming systemUS7886279Dec 9, 2005Feb 8, 2011Canon Kabushiki KaishaInformation processing apparatus, control method therefor, computer program, and storage mediumUS8001545Sep 27, 2007Aug 16, 2011International Business Machines CorporationMethod and system for regulating communication traffic using a limiter threadUS8046737Feb 23, 2006Oct 25, 2011Microsoft CorporationXML application frameworkUS8132148Feb 23, 2006Mar 6, 2012Microsoft CorporationXML application frameworkUS8181183May 15, 2012International Business Machines CorporationMethod, system and program products for managing thread pools of a computing environment to avoid deadlock situationsUS8275793Feb 23, 2006Sep 25, 2012Microsoft CorporationTransaction transformsUS8418132Feb 23, 2006Apr 9, 2013Microsoft CorporationApplication description languageUS8434099May 23, 2005Apr 30, 2013Microsoft CorporationEfficient linking and loading for late binding and platform retargetingUS8793649Mar 2, 2012Jul 29, 2014Microsoft CorporationXML application frameworkUS8799857Feb 23, 2006Aug 5, 2014Microsoft CorporationXML application frameworkUS9292892Nov 22, 2010Mar 22, 2016Michael S. WiltshireDual display gaming system and methodUS9436510 *Sep 15, 2010Sep 6, 2016Bull SasSystem and method for managing the interleaved execution of threadsUS20020055965 *Dec 26, 2001May 9, 2002Microsoft CorporationMethod and system for accessing objects of different thread typesUS20020059358 *Dec 26, 2001May 16, 2002Microsoft CorporationMethod and system for accessing objects of different thread typesUS20030051064 *Sep 13, 2001Mar 13, 2003International Business Machines CorporationMethod and system for regulating communication traffic using a limiter threadUS20030188004 *Feb 3, 2003Oct 2, 2003John FairweatherSystem and method for navigating dataUS20030200253 *Apr 17, 2002Oct 23, 2003International Business Machines CorporationCommon thread serverUS20050149934 *Mar 3, 2005Jul 7, 2005International Business Machines CorporationMethod, system and program products for managing thread pools of a computing environment to avoid deadlock situationsUS20060150017 *Dec 9, 2005Jul 6, 2006Makoto MiharaInformation processing apparatus, information processing method, computer program, and storage mediumUS20060245096 *Feb 23, 2006Nov 2, 2006Microsoft CorporationApplication framework phasing modelUS20060248104 *Feb 23, 2006Nov 2, 2006Microsoft CorporationTransaction transformsUS20060248112 *Feb 23, 2006Nov 2, 2006Microsoft CorporationApplication description languageUS20060248449 *Feb 23, 2006Nov 2, 2006Microsoft CorporationXML application frameworkUS20060248450 *Feb 23, 2006Nov 2, 2006Microsoft CorporationXML application frameworkUS20060248451 *Feb 23, 2006Nov 2, 2006Microsoft CorporationXML application frameworkUS20070281789 *Feb 5, 2007Dec 6, 2007New MillenniumSlim terminal gaming systemUS20070283362 *Aug 14, 2007Dec 6, 2007International Business Machines CorporationCommon thread serverUS20080022289 *Sep 27, 2007Jan 24, 2008Curtis Bryce AMethod and system for regulating communication traffic using a limiter threadUS20080052711 *Oct 31, 2007Feb 28, 2008Microsoft CorporationHighly componentized system architecture with loadable virtual memory managerUS20120185866 *Sep 15, 2010Jul 19, 2012Philippe CouveeSystem and method for managing the interleaved execution of threadsEP1875331A2 *Apr 20, 2006Jan 9, 2008Microsoft CorporationMultithreading with concurrency domains* Cited by examinerClassifications U.S. Classification719/315, 719/330International ClassificationG06F9/46Cooperative ClassificationG06F9/52European ClassificationG06F9/52Legal EventsDateCodeEventDescriptionJan 29, 1997ASAssignmentOwner name: MICROSOFT CORPORATION, WASHINGTONFree format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:HILL, RICHARD D.;MITCHELL, ALEXANDER A.;REEL/FRAME:008419/0370Effective date: 19970128Feb 20, 2003FPAYFee paymentYear of fee payment: 4Feb 16, 2007FPAYFee paymentYear of fee payment: 8Feb 10, 2011FPAYFee paymentYear of fee payment: 12Dec 9, 2014ASAssignmentOwner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTONFree format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034541/0001Effective date: 20141014RotateOriginal ImageGoogle Home - Sitemap - USPTO Bulk Downloads - Privacy Policy - Terms of Service - About Google Patents - Send FeedbackData provided by IFI CLAIMS Patent Services

value: Google Patents is a search engine from Google that indexes patents and patent applications.


text:
Walking by Night by Kate Ellis | Library Chatter
← Wrong Way Round by Lorna Hendry
Happy to have our Van Man back! →
Posted on June 29, 2016	by Shire of Mundaring Libraries
Walking by Night by Kate Ellis is the fifth and latest of the Joe Plantagenet mysteries set in North Yorkshire. If you are looking for interesting English detective mystery stories, look no further. Kate Ellis is able to create a sense of menace which propels the reader to keep turning the pages, to hope against hope that the intended victim may escape. Walking by Night centers around people involved in a theatre group. A young girl believes she saw a body whilst walking drunkenly through a deserted undercroft which is the only remaining part of a medieval structure. She also believed she saw the ghost of a long-dead nun watching her. People are understandably sceptical. Then a woman’s body turns up. The ending surprises, as none of the conclusions the reader might come to quite add up.
There is some historical reference which adds to the atmosphere and setting of the novel, but not to the degree of Ellis’ Wesley Petersen series. Kate Ellis writes a very readable novel, which is a well-written page-turner that satisfies.
This entry was posted in Book Reviews and tagged book review, detective and mystery stories, Kate Ellis, Walking by Night. Bookmark the permalink.

type: global

value: WordPress (WP, WordPress.org) is a free and open-source content management system (CMS) written in PHP and paired with a MySQL or MariaDB database. Features include a plugin architecture and a template system, referred to within WordPress as Themes.


text:
Black Angus Steakhouse Locations & Hours Near Newport Beach, CA - YP.com
Filet mignon nachos had only 2 very small pieces of steak. I thought they were playing a joke on me, but nope. Complete ripoff. Also, 9 oz. lobster was more like a crawfish. Half the expected size. De
10.81 mi$$$
16.96 miMenu$$
27.77 miMenu$$

value: The yellow pages are telephone directories of businesses, organized by category rather than alphabetically by business name, in which advertising is sold. The directories were originally printed on yellow paper, as opposed to white pages for non-commercial listings.


text:
NEE Headlines | NextEra Energy, Inc. Common Sto Stock - Yahoo! Canada Finance Skip to search. New User? Register Sign InHelp Get new Yahoo! Mail apps Notifications Help Mail My Y! Yahoo! Yahoo! Canada Finance Search Search Web HOMEPHOTOSVIDEODaily TickerMoney MinuteNEWSCanadaRetailTechnologyWorldPERSONAL FINANCECareersInvesting & PlanningReal EstateRetirementSaving & SpendingTFSABLOGSBalance SheetDashboardInsightPay DayINVESTINGCurrency ConverterCurrenciesMarketsBondsCommoditiesCanada IndicesUS IndicesWorld IndicesPrice GainersPrice LosersProvidersMY PORTFOLIOSign in to access My PortfoliosTHE GOOD LIFEAutomobilesHomes & DesignTravel & HotelsWealth & Luxury Search for share pricesSearch for share pricesFri May 24, 2013 9:31PM EDT - Canadian Markets closed TSX 0.07% TSX Ventures 0.00%More On NEEQuotesSummaryOrder BookOptionsHistorical PricesChartsInteractiveBasic ChartBasic Tech. AnalysisNews & InfoHeadlinesCompany EventsMarket PulseCompanyProfileKey StatisticsSEC FilingsCompetitorsIndustryComponentsAnalyst CoverageAnalyst OpinionAnalyst EstimatesOwnershipMajor HoldersInsider TransactionsInsider RosterFinancialsIncome StatementBalance SheetCash FlowNextEra Energy, Inc. (NEE) -NYSE 77.30 0.92(1.18%) 4:02PM EDT|After Hours
77.30 0.00 (0.00%) 4:20PM EDTAdd to PortfolioHeadlinesGet Headlines for: Friday, 24 May, 2013The Worst Reason to Panic About the Marketat Motley Fool (Fri 5:15PM EDT)NextEra Energy delivered strong performance in 2012 and is positioned well for future growth, president and CEO tells shareholdersPR Newswire (Fri 2:30PM EDT)NextEra Energy Inc Stock Buy Recommendation Reiterated (NEE)at TheStreet (Fri 10:05AM EDT)Mini Flash-Crash Trades Wiped From Tape, But Not Canceledat The Wall Street Journal (Fri 9:41AM EDT) Thursday, 23 May, 2013[$$] Rocky Start for Stocks' New Circuit Breakersat The Wall Street Journal (Thu May 23)NextEra Energy's CEO Hosts Annual Shareholder Meeting (Transcript)at Seeking Alpha (Thu May 23)4 Energy Stock Stories To Spark Investment Interestat Wall St. Cheat Sheet (Thu May 23)Legit or Not? NYSE Lets Trades Stand But Cuts Them From Tapeat CNBC (Thu May 23)NYSE says AEP, NextEra trades stand after crash at openReuters (Thu May 23)[video] Cashin After the Closeat CNBC (Thu May 23)Stocks Stage Turnaround; Close Well Off Lowsat CNBC (Thu May 23)[video] NextEra Energy Comments on Erratic Tradingat CNBC (Thu May 23)AEP, NextEra Energy shares tumble at opening; trades to standat Reuters (Thu May 23)NYSE Rules AEP, NextEra Energy Trades 'Aberrant'at The Wall Street Journal (Thu May 23)NYSE: Erratic Utilities Trades Stand, But Excluded From Tapeat Barrons.com (Thu May 23)NYSE says AEP, NextEra trades to standat Reuters (Thu May 23)Utility Stocks Flash Crash At The Opening BellBusiness Insider (Thu May 23)American Electric Power Drops 54% at Market Open, Then Recoversat Bloomberg (Thu May 23) Thursday, 16 May, 2013Before the Bell Scans of CIG, CMS, NEE, ED, and FCELAccesswire (Thu May 16) Thursday, 28 February, 2013NextEra Energy named No. 1 in its sector for seventh consecutive year on Fortune magazine's 'Most Admired Companies' listCNW Group (Thu Feb 28)Older HeadlinesView headlines from: Wednesday, 27 February, 2013Wednesday, 20 February, 2013Wednesday, 13 February, 2013Wednesday, 6 February, 2013Wednesday, 30 January, 2013Wednesday, 23 January, 2013Wednesday, 16 January, 2013Wednesday, 9 January, 2013Wednesday, 2 January, 2013Wednesday, 26 December, 2012
Copyright © 2009 Yahoo! All rights reserved.Quotes for NYSE, Nasdaq and NYSEAmex are Real-time and sourced from Nasdaq Last Sale when available. If not available from NLS, quotes will appear delayed from primary listing source. See also delay times for other exchanges. All information provided "as is" for informational purposes only, not intended for trading purposes or advice. Neither Yahoo! nor any of independent providers is liable for any informational errors, incompleteness, or delays, or for any actions taken in reliance on information contained herein. By accessing the Yahoo! site, you agree not to redistribute the information found therein. Real-Time continuous streaming quotes are available through our premium service. You may turn streaming quotes on or off.Fundamental company data provided by Capital IQ. Historical chart data and daily updates provided by Commodity Systems, Inc. (CSI). International historical chart data, daily updates, fund summary, fund performance, dividend data and Morningstar Index data provided by Morningstar, Inc.11845501581184550158{"yrb_token" : "YFT_MARKET_CLOSED", "tt" : "1369445465", "s" : "nee", "k" : "a00,a50,b00,b60,c10,c63,c64,c85,c86,g00,g53,h00,h53,l10,l84,l85,l86,p20,p43,p44,t10,t53,t54,v00,v53", "o" : "^gsptse,^spcdnx", "j" : "c10,l10,p20,t10", "version" : "1.0", "market" : {"NAME" : "", "ID" : "ca_market", "TZ" : "EDT", "TZOFFSET" : "-14400", "open" : "", "close" : "", "flags" : {}} , "market_status_yrb" : "YFT_MARKET_CLOSED" , "portfolio" : { "fd" : { "txns" : [ ]},"dd" : "","pc" : "","pcs" : ""}, "STREAMER_SERVER" : "http://streamerapi.finance.yahoo.com", "DOC_DOMAIN" : "finance.yahoo.com", "localize" : "0" , "throttleInterval" : "1000" , "arrowAsChangeSign" : "true" , "up_arrow_icon" : "http://l.yimg.com/a/i/us/fi/03rd/up_g.gif" , "down_arrow_icon" : "http://l.yimg.com/a/i/us/fi/03rd/down_r.gif" , "up_color" : "green" , "down_color" : "red" , "pass_market_id" : "0" , "mu" : "1" , "lang" : "en-CA" , "region" : "CA" }1

value: Yahoo (, styled as yahoo!) is an American web services provider. It is headquartered in Sunnyvale, California and operated by the namesake Yahoo!


text:
Cash For Cars Ireland: VW expected to offer to buy back nearly 500000 U.S. diesel vehicles
Posted by Paul Costello at 08:18
Labels: 2016 at 04:05PM, April 22, Cash For Cars Ireland - Dublin

value: Blogger is an American online content management system (CMS) which enables multi-user blogs with time-stamped entries. Pyra Labs developed it before being acquired by Google in 2003.


text:
Amazon.co.uk: fly screens for patio doors
1-16 of 240 results for "fly screens for patio doors"
Flyscreen Queen Fly Screen Multi Panel Fly Screen Door White 150cm x 230cm (59 x 90.5 inch)
... This fly screen door has white panels that clip into the white top rod. ...
Flyscreen Queen Door Magnetic Patio Door White 120 x 215cm
... flyscreen and insect screen patio door. Simply walk through ...
TRIXES String Curtain Dew Drop White Silver Divider or Window Curtain Panel 90x200cm Perfect as Fly Screen
... flies out It is easy to hang The beautiful curtain can be used as a door ...
Magnetic Screen Door [Continuous Magnetic Closure Strip] Bug, Fly, Mosquito Repellent Keep Flies Out with Heavy Duty Mesh & Full Frame Velcro Fits Doors up to 43" x 87" / 110cm x 220 cm (Black)
... mesh for patio, gazebo, and front doors, bug, fly, mosquito ...
£79.95£119.95Prime
... VERSATILE: Fly Screen Curtain can be used on patio doors,french doors ...
Flyscreen Queen Magnetic 160 x 215 Patio Door White
£3.43	(14 new offers)
£4.95£12.99Add-on Item
£3.32	(27 new offers)
... The screen blind can be used for windows, patios, as a partition for ...
Dew Drop Beaded Chain String Curtain Panel (Silver)
Ideal for doors, windows, partitions, room dividers, patio doors, fly screens
New "Sparkle" White Beaded Fly Insect Door Curtain Screen 100 x 200cm
... Great for using on back doors or use on a patio to create a real retro ...
Fly Screen Door, BearMoo Fits 110x220CM Sticky Design Magnetic Fly Insect Screen Door Screen for keeping out flies, with Heavy Duty Mesh Curtain and Hook & Loop tapes Included, Easy Installation, No Gap
... length of the center, the screen door automatically close more ...
Flyscreen Queen Multi Panel Fly Screen Door Charcoal 120cm x 230cm (47 x 90.5 inch)
Flyscreen Queen Wide Span Magnetic 244 x 210 Patio Bi Fold Door White
... Bi Fold Doors, Patio Doors, Terraces Secured ... extra screens ...
Rabbitgoo Magnetic Fly Screen Door Mesh Bug Proof Curtain with Lace Full Frame Hook and Loop Tape Top-to-Bottom Automaticlly Shut Sealed with 26 Magnet Hands Free Keeping out Insects Mosquitoes for back door patio doors, Fits Doors UP TO 154 x 228CM MAX
Kingfisher® Bamboo Effect Curtain Blinds Wooden Beaded Insects Fly Door Screen Screening
by Kingfisher®
... Effect Curtain Blinds Wooden Beaded Insects Fly Door Screen Screening ...

value: Amazon.com, Inc. ( AM-ə-zon) is an American multinational conglomerate which focuses on e-commerce, cloud computing, digital streaming, and artificial intelligence.


text:
Dearoma Tours (Rome, Italy): Top Tips Before You Go - TripAdvisor
Dearoma Tours, Rome: Hours, Address, Attraction Reviews
Search Europe›Italy›Lazio›Rome›Rome Attractions›Dearoma Tours
#29 of 157 Outdoor Activities in Rome Certificate of Excellence Neighbourhood: Navona / Pantheon / Campo de’ Fiori
Walking Tours, Cultural Tours, Vespa, Scooter & Moped Tours, Historical & Heritage Tours, Bike Tours, Outdoor Activities, Tours, More Write a Review
Return to Map Get directions Address: Via Dei Balestrari 11, 00186 Rome, Italy Phone Number:
+39 06 4547 6349 Website Improve this listing
Description: Dearoma is a Rome Licensed Tour operator born to offer our guests a unique...
The Fiat 500 Tour was a surprise gift for me. I am Brazilian and it was my second day in Rome, so, every detail and places we've been was an amazing discovery. Our guide Stefano...
read more Reviewed 2 days ago tatattb, Sao Paulo, SP
Read reviews that mention: All reviews secret rome
reviews Clear all Start your review of Dearoma Tours Click to rate
NEW The Fiat 500 Tour was a surprise gift for me. I am Brazilian and it was my second day in Rome, so, every detail and places we've been was an amazing discovery. Our guide Stefano, was very polite, knew all the story about the places (and also the many others during our tour I couldn't stop asking him). We went...
More Helpful? Thank tatattb Report Dorothy O
2 reviews “First time in Rome, They truly took care of us!”
We took the 8 hour bike tour through the city of Rome. We met our guide outside of the Colosseum at the metro stop. He patiently waited for us while we ate our breakfast croissants and coffee. He asked us what our expectations were and we made adjustments to the itinerary so that we could visit the places that interested...
More Helpful? Thank Dorothy O Report disheveledprofessor
52 helpful votes “Roman Holiday”
Shades of Gregory Peck and Audrey Hepburn in "Roman Holiday", our vespa tour was the highlight of our time in Rome. Winging around Rome on a vespa is exhilarating; a lot more can be seen than trying to cover ground on foot; our guide, Valerio, is extremely knowledgeable, and has a passion for sharing his city and its history. I...
More Helpful? Thank disheveledprofessor Report Bracko1
Level Contributor 3 reviews “Vespa Tour”
Had the most fantastic tour of Rome on Sunday. Myself and my wife took a Vespa tour around the city of Rome. Our drivers were Valerio and Simone. They took us to all the main sites of Rome and at each stop Valerio gave us an insight to all the history of these ancient sites. We also had the pleasure...
More Helpful? Thank Bracko1 Report MargiePink
12 helpful votes “A Nostalgic Fiat 500 tour of the antiquities of Rome”
For someone who had actually owned 2 Fiat 500s in his younger days, this was always going to be fun. Our driver and guide was Valerio, and he was a delight: knowledgeable, interesting and charming.
He knew his history, certainly seemed to enjoy passing it on and was a pleasure to spend the afternoon with.
This tour particularly suited us...
More Helpful? Thank MargiePink Report Kathy-Jones1
Level Contributor 6 reviews 4 helpful votes “Vintage Vespa Tour”
A fantastic way to experience Rome like the locals. Our guide, Valerio, was a wealth of knowledge. His passion for the history of his city, Rome, was evident. The tour was tailored to our interest & tried to make sure that we did not duplicate what we had done in previous sightseeing. Would highly recommend.
Helpful? Thank Kathy-Jones1 Report Kathpot
9 helpful votes “Best Bike Tour”
Book early for this great insight into Rome's history! Valerio Caffio is an historian with a wealth of knowledge to share.
Valerio gave us a customised tour, comfortable cycling with plenty of stops to review the sites, the use of images on his tablet device really helped us understand fully what we were looking at.
This would suit anyone who...
More Helpful? Thank Kathpot Report Kate C
Level Contributor 3 reviews 2 helpful votes “Vespa tour of Rome---Highlight of the entire 2 week vacation”
Our family of 4 LOVED this adventure around rome. Valerio was so knowledgable and friendly. He taught us much about the history at every stop. We felt safe and well cared for on our own "Lizzie McGuire" experience. We were able to tailor this experience to our own desires and trip. My dad even got to drive his own Vespa!...
Thank Kate C Report jjtucci66
1 helpful vote “Touring Roma Italian Style”
We had a blast with Valerio during his Vespa tour of Rome. We were expecting a lovely ride though Rome but what we got was an adventure that we tell anyone who will listen! We had already had 2 wonderful walking tours and ventured out ourselves but what we did not anticipate during this Vespa tour was all the places...
More Helpful? Thank jjtucci66 Report Shannonslaughter
Level Contributor 3 reviews 1 helpful vote “Highlight of Rome!”
This afternoon vespa tour was our favorite part of Rome! The tour guides (Riccardo and Miguele) were absolutely wonderful and made it such a memorable experience. Touring on the Vespas allowed us to see so many of the historical sights that simply wouldn't be possible on foot. Riccardo and Miguele knew their history so well and were so passionate about...
More Helpful? Thank Shannonslaughter Report Previous
Updating list... Travellers who viewed Dearoma Tours also viewed
Rome, Lazio Cooltra Motos Roma
Been to Dearoma Tours? Share your experiences! Write a Review
Here's what previous visitors have asked, with answers from representatives of Dearoma Tours and other visitors
3 questions Ask a question patriciap72017
My family is interested in the Private Tour of Ancient Rome by Bicycle...Including Skip the Line Colosseum, Forum and Caracalla Baths.1. Do the bicycle riders actually enter the Forum....or do they only ride outside the Forum?2. Do the bicycle riders enter the Caracalla Baths and tour the Baths?
Ah, shucks! I am hoping to book a Vespa tour for me tomorrow (9 November) but it looks like there is no availability. Perhaps something has opened? 5 months ago
Problem with this question? Show all answers (2) Answer Janey H
What happens if it rains and I've booked a vespa tour?
(3) Questions? Get answers from Dearoma Tours staff and past visitors.

value: Tripadvisor, Inc. is an American online travel company that operates a website and mobile app with user-generated content and a comparison shopping website.


text:
Journeys in Ministry: March 2010
Returning to Mt. Zion
Twenty years ago my family and I vacationed in Kissimmee, Florida. On the Sabbath we attended a small church in town that met in an unremarkable building but was filled with extraordinary people. One of the things I remember was that they had the potluck catered by a church members. We had a blessed Sabbath but never thought we'd be back again. Little did we know.
We returned to Mt. Zion Seventh-day Adventist Church on Sabbath, March 20. We would've missed the church if not for the sign (a new one since 20 years ago). The church we worshiped in was still there but the congregation was gathered in a beautiful multi-purpose facility. Instead of about 75 people in church there were three-times that number. What happened?
I noticed some things: They are using media in their service like few congregations I have seen. All the announcements are locally produced video-shorts with members doing it all. What a great idea. And, most importantly, they involve the youth and young adults in the church at every step. In addition, they are active in community service in the city. No wonder they have grown. They're doing what Jesus asks us to do: "GO!"
A special surprise was the speaker of the hour--our friend from the Southeastern California Conference, Dr. Emil Peeler. (You can get a taste of Dr. Peeler's preaching at http://vodpod.com/watch/2544721-dr-emil-peeler) We were blessed by a spirit-filled message, uplifting music, and wonderful fellowship. As we departed our prayer was that another 20 years would not need to pass before we would meet again in the New Earth.
God is at work in Kissimmee, FL through the Mt. Zion Church. Check them out on the web at, http://www.mtzionsda.org
Posted by Bradford C. Newton at 7:39 PM No comments:
Labels: Emil Peeler, Kissimmee, Mt. Zion
Come Apart and Pray....Really?
It was the end of a long week of meetings that tackled some of the proverbial "big issues" that we grapple with as a church. I had been away from home for a week and would've much preferred to just go home and rest. But...how do you argue with the notion that we should stay together for another day and a half to pray together, right!?
That's how I entered into a first for Pacific Union administrators (at least to my meager knowledge!) Conference presidents, Union officers, and a few others were going to spend Friday night and all day Sabbath in prayer and reflection. How do you do that? We typically move quickly from one meeting to another with little time for any corporate spirituality except for perhaps the Sabbath.
I really didn't know what to expect since this was a first for me as a church administrator. Spending extended time with colleagues to pray was something I had done as a pastor with other pastors. But as we gathered in the West Building of the Union headquarters for the celebration of the Lord's Supper on Friday evening, March 12, I uttered the prayer, "Well, Lord, I'm open to what you'd like to do with me."
As it turned out, by Saturday night I concluded that this was the best thing we possibly could've done as church leaders. This WAS NOT another church committee meeting masquerading as a prayer session. THIS was the REAL DEAL. We actually prayed together, sang, reflected upon selected Bible and Spirit of Prophecy selections and did what we always talk about doing. We sought the Lord. There we were no sermons. Nobody was the center of attention. We sought the Lord together and cared for each other spiritually!
I know that this may surprise some of our members but the people gathered in that upper room in the West Building (yes, its actually on the second floor) love God supremely, struggle with human frailty, love the church, and really long for Jesus to come. This was the Church at its best because we were the New Testament Church at its core.
I was refreshed. It's really true that Jesus gives you a renewal in His presence that no nap or mindless television viewing can come close to match. And, I'm glad that we came apart to pray. Really! I hope we do it again!
Posted by Bradford C. Newton at 7:07 PM No comments:
Labels: Pacific Union, Prayer
Ministers'-in-Waiting
In the Spring of 1980 a group of serious looking men in black suits gathered in the Indiana Room of the Andrews University cafeteria. There to meet them were the graduating theology seniors--including a skinny guy from Illinois. I will always remember these Conference President's and Ministerial Directors from the Lake Union territory meeting, greeting, and interviewing the earnest group of "minister's-in-waiting." It was with a grateful heart that I received a call from the Illinois Conference to go to the Seminary (I wasn't married yet!!--a requisite to pastoring in those years.)
As I hosted the Theology Senior Interviews for the Pacific Union Conference at Pacific Union College (February 28) and La Sierra University (March 8) the circle was coming around. And, I know that each of us who interviewed these soon-to-be graduates were mindful that we had been there before. Since 2005 this annual gathering has been the highlight of my year. It is the ultimate faith-affirming experience to dialogue with young men and women who have heard the call of Jesus for service.
Our two higher education institutions have designed their theology programs to maximize the exposure of young minds to both the Biblical and practical aspects of ministry. The students that reach their senior year have benefited from an intentionally designed curriculum which promotes personal reflection upon God's call in their life for a life of ministry.
Each of these students spends about 30 minutes with each Conference leadership team for a personal interview followed by a luncheon together. The goal is for each graduate to find a place in the "vineyard of ministry." Even in tough financial times it is my conviction that we need to utilize these committed young people in some aspect of ministry in every conference territory.
As we parted company with these ministers-in-waiting I expected to see them engaged soon in serving the Lord of the Harvest. They are the pledge of God that His work will be finished and we will soon be home with Him.
Posted by Bradford C. Newton at 6:03 PM No comments:
Labels: La Sierra University, Pacific Union College, Senior Theology Interviews


text:
1X(Black MS Memory Card Reader XD USB Micro SDHC All in One SD CF M2 Jing L5W5) | eBay
10X(MS Memory Card Reader XD USB Micro SDHC All in One SD CF M2 Jing black H2P8)
ALL IN 1 Multi CARD READER SD/XD/MMC/MS/CF/SDHC USB 2.0 P2N8
6 in 1 USB 3.0 Multi Memory Card Reader for TF M2 CF XD MS Card w/Cable
Black MS Memory Card Reader XD USB Micro SDHC All in One SD CF M2 Jing Q8U2
Delock 91704 USB 3.0 Card Reader All in 1 CF,Memory Stick (MS),microSDHC,MMC,M
DIGITUS DA-70330-1 Card Reader All-in-one, USB 3.0 Card Reader Support
All in 1 USB 3.0 Multi Memory Card Reader High Speed Micro SD TF CF XD M2 MS AЕ
colortop9 (189425 )
Details about 1X(Black MS Memory Card Reader XD USB Micro SDHC All in One SD CF M2 Jing L5W5)
591603695559
292827695581
Last updated on 07 Aug, 2019 15:09:47 AEST View all revisions

value: eBay Inc. ( EE-bay) is an American multinational e-commerce corporation based in San Jose, California, that facilitates consumer-to-consumer and business-to-consumer sales through its website.


text:
Francois Zoko | Chadwick Media
Tag Archives: Francois Zoko
City Make First Summer Signing
Steven Davies Signs From Blackpool Bradford City have today confirmed the signing of Steven Davies on a one-year contract after the striker left Blackpool at the end of last season. The forward joined his new City team-mates this morning for training … Continue reading →
Posted in Uncategorized	| Tagged Apperley Bridge, Ashton Gate, Billy Clarke, Blackpool, Bloomfield Road, Bradford City, Bristol City, Derby County, Francois Zoko, Phil Parkinson, Pride Park, Sheffield United, Steven Davies, Tom McMahon, Tranmere Rovers	| Leave a comment


text:
Emergence Phenomena: How dare you SIRS?
Here's a good reminder that risk stratifiers and mnemonics are just that - prognostications. Like a wise man once said - its all a spectrum.
Time to Initial Antibiotic Administration, and Short-term Mortality Among Patients Admitted With Community-Acquired Severe Infections With and Without the Presence of Systemic Inflammatory Response Syndrome
Daniel Pilsgaard Henriksen; Christian B Laursen; Jesper Hallas; Court Pedersen; Annmarie Touborg Lassen
Emerg Med J. 2015;32(11):846-853.
Methods In this retrospective follow-up study, we included all adult patients (≥15 years) presenting to a medical emergency department in the period between September 2010 and August 2011 with a first-time admission of community-acquired severe infection (infection with evidence of organ dysfunction), with and without SIRS at arrival. The presence of SIRS was defined as two or more of the criteria according to the American College of Chest Physicians/Society of Critical Care Medicine (ACCP/SCCM) definitions. Cases were identified by manual chart review using predefined criteria of infection. Data on vital signs, laboratory values and antibiotic treatment were obtained electronically.
Results We included 1169 patients with infection and organ dysfunction, treated with antibiotics within 24 h after arrival (median age 76.1 years (IQR 63.1–83.5), 567 (48.5%) men). In all, 886 (75.8%) presented with SIRS, and 283 (24.2%) presented without SIRS. Median time to antibiotics was 4.6 h (IQR 2.9–7.0) in patients with SIRS and 6.7 h (IQR 4.5–10.3) in patients without SIRS (p<0.0001). Thirty-day mortality in patients with and without SIRS was 18.4% (95% CI 15.9% to 21.1%) and 16.6% (95% CI 12.5% to 21.5%), respectively.
Conclusions SIRS was absent in one-quarter of patients admitted with severe infection. The 'door-to-antibiotics' time was significantly shorter for patients with SIRS compared with patients without SIRS, but no difference was found in 30-day mortality.
Posted by Rahul Goswami on January 03, 2016
Labels: critical care, medicine, micro;


text:
Costa Rica Calling: The Saviour of Costa Rica....and British at that!
Posted by the fly in the web at 14:54
dinahmow 5 July 2012 at 15:50
Ah...the beloved Bailey Bridge,inspiration of my childhood Meccano constructions!(Well, it was the only practical way to get from one end of the sofa to the other!)
Growing up in an area of hydro dams I was familiar with these marvellous bridges.
the fly in the web 5 July 2012 at 16:16
I only had father's tales....but now am on familiar terms with them!
Joanne 5 July 2012 at 16:35
Knowing the bridge must be crossed, would you take that route again. Or for that trip, if you knew before. And, in the video, is that foot traffic accumulating at the other side waiting for the vehicle to clear the bridge?
the fly in the web 6 July 2012 at 05:55
It's not the only bridge like that - returning from Nicaragua with BIL we took a wrong exit from the laughingly called Caldera motorway and ended up on another one!
Yes, the people are waiting until there is nothing on the bridge....
the fly in the web 5 July 2012 at 19:55
Steve 6 July 2012 at 00:03
I will never complain about potholes in the road again.
the fly in the web 6 July 2012 at 05:57
http://www.crhoy.com/tome-rutas-alternas-paso-regulado-en-general-canas/
If you follow the link you will see the mother of all potholes....so great is the chaos that the poor kids in the capital have had their school holidays postponed to ease the chaos!
Sarah 6 July 2012 at 00:30
You have to be prepared for an adventure whenever you set foot outside your door basically.
The most I have to be concerned about is whether my cat will suddenly make a dash for it and get under my feet. :)
the fly in the web 6 July 2012 at 05:58
Toss up which is more dangerous....the daily feline or the once and never again bridge...
Niall & Antoinette 6 July 2012 at 01:26
Great contraptions, my father explained how they worked once when we encountered one--though can't remember where it was.
Wonderful beasts, aren't they!
The Broad 6 July 2012 at 09:01
Some dear friends of ours told us a story about a bridge in Costa Rica. I wish I could remember the details -- but there was something about the car having to make a 'leap of faith' or 'running jump' from the land to the bridge and then having to land just right in order to be able to drive across. On this same trip they got stopped by bandits, who were quite friendly in an oddly Costa Rican kind of way...
the fly in the web 6 July 2012 at 09:16
Must have been in the pre drug trade days as the modern bandits are distinctly unfriendly, it appears.
We were on our first trip to Costa Rica when our bus tried to 'jump' a crevasse which had opened up in the road...
Ayak 6 July 2012 at 09:44
I think you are incredibly brave to have crossed that bridge. You wouldnt catch me doing that!
the fly in the web 6 July 2012 at 10:40
Needs must when Danilo drives....
Annie 8 July 2012 at 03:17
This is living life in another world - hanging on to it at times too. Slightly concerned that temporary, wartime structures are what are providing access to much of the country though full of admiration at their invention and durability!
Great post - most interesting, though I don't like thinking of the poor folk in the submerged part of the bus.
the fly in the web 8 July 2012 at 04:07
While living in rural Costa Rica generally compares very favourably with living in rural France - more and better services - the roads are a perpetual problem.
Just today, coming back from a hospital appointment, half the raod had disappeared at one stretch...but the crews were already there...so they can do it - it{s the usual story of apathy at national planning level.
Friko 9 July 2012 at 04:14
The Bailey bridge across our own river here at Valley's End allowed traffic from one side to the other (the main thoroughfare across the packhorse bridge being closed for repairs) recently.
I have to say, I'm glad it's gone again. The old-fashioned footbridge is a lot prettier.
Your life in Costa Rica seems to be quite an adventure, I'm not sure I'd have the courage. Rural England is adventurous enough for me.
the fly in the web 9 July 2012 at 04:31
When I moved to rural France people used to say...
'Aren't you brave!'
Perpetua 11 July 2012 at 13:11
I'm with Ayak. I'd stay at home for ever if I had to cross a bridge like that. I'm such a wimp where heights and wobbly things are concerned. You and Mr Fly must be made of much stronger stuff....
the fly in the web 11 July 2012 at 13:19
We couldn't turn round!
Jenny Woolf 13 July 2012 at 05:48
I guess it is good to face challenges :D
My great aunt used to have to get herself over river sometimes when she travelled around India for her job. !
the fly in the web 13 July 2012 at 07:09
Challenges are one thing...when people have been waiting fourteen years for a bridge so that they can get their goods to market and there are deaths annually as people are borne away trying to cross the river then the government's lack of concern is scandalous.
Anonymous 14 July 2012 at 03:30
And I thought the roads were bad in Ireland. We are blessed by comparison. It is shocking to read that people are dying and the government does nothing.
the fly in the web 14 July 2012 at 06:27
Since the 70s...when there was concern for people...the elite have considered the rest of the people as not worth bothering about.
This is beginning to change with the spread of internet and the government's response has been to try to muzzle the press and whistleblowers.
Luckily there is a constitutional court which won't stand for it...we're about to live in interesting times.
Life, Laughter and Paris 14 July 2012 at 18:39
Yikes! We're having major problems with the bridges and inner city structure in Montreal. Huge pieces of road collapsing - but now these problems seem small - so far no lives lost. That's a terrible situation in Costa Rica. Keep safe!
the fly in the web 14 July 2012 at 20:26
Costa Rica to the rescue...when the transpotrt department find the bridges they have allegedly vought we'll send you some!
Vest 5 August 2012 at 21:27
January 1977 saw the last Baily bridge to be built in the Sydney NSW AUS Suburbs as a result of the 'Granville train disaster' when an early morning commuter train swayed into pylon of the former bridge.
the fly in the web 6 August 2012 at 16:58
I reckon Costa Rica must be a retirement home for Bailey bridges...


text:
Himachal health minister's resignation accepted - Yahoo! News India
Himachal health minister's resignation acceptedBy Indo Asian News Service | IANS India Private Limited – Wed 4 Jul, 2012
Shimla, July 4 (IANS) Himachal Pradesh Governor Urmila Singh Wednesday accepted the resignation of Health Minister Rajeev Bindal.
Bindal, who has been appointed general secretary of the Bharatiya Janata Party (BJP), resigned as cabinet minister a few days ago to take up his new assignment.
Chief Minister Prem Kumar Dhumal told reporters here that the health portfolio would be looked after by Irrigation and Public Health Minister Ravinder Ravi.
Bindal, facing allegations of corruption, quit after a segment of his own party demanded his resignation to project a clean image of the government ahead of assembly elections this year.
Explore Related ContentNitish wants BJP ministers out of his governmentNitish must resign if NDA breaks up: BJPAndhra health minister dismissedAndhra health minister sackedBJP will not retract from its decision to elevate ModiProbe into mass phone tapping over: Himachal PoliceTroubled Karnataka BJP wants Advani to stay (Blank Headline Received)Reuters BJP calls for Bihar shutdown today to protest against JD (U)'s "betra …Ani Amit Shah takes in-charge of U.PTIMES NOW
Related Videos 1:10FBI ends search for Jimmy Hoffa's body49 minutes agoReuters Videos 0:33Flooding prevents pilgrims from reaching Catholic shrine1 hour 11 minutes agoReuters Videos 0:53Tit-for-tat shelling between Syria’s Sunni, Shi’ite villages1 hour 25 minutes agoReuters Videos 1:20Jordan, US hold military exercise in desert, across border from Syria2 hours 51 minutes agoReuters Videos 1:22Scores killed as monsoon hits north India2 hours 54 minutes agoReuters Videos 1:02Angelina Jolie's stunt double sues News Corp3 hours agoReuters Videos 0:43Somali Islamists strike at U.N.4 hours agoReuters Videos 2:30Obama calls for nuclear arms cut4 hours agoReuters Videos 1:43U’khand flood: Many rescued, much more left to evacuate4 hours agoIndia Newzstreet 1:18Sri Lanka, a dangerous team, we will be cautious: Dhoni4 hours agoIndia Newzstreet 0:31Landslides sweep away roads, houses in monsoon5 hours agoReuters Videos 0:37U.S. First Lady places flowers in Berlin Wall5 hours agoReuters Videos 0:21Obama says U.S. to cut nuclear weapons deployment5 hours agoReuters Videos 0:47PM, Sonia undertake aerial survey of the flood hit areas6 hours agoIndia Newzstreet 1:17Declare Uttarakhand flood situation as 'national calamity': BJP6 hours agoAni 2:12Sri Lanka is a dangerous team: MS Dhoni - Part 26 hours agoAni 3:21Sri Lanka is a dangerous team: MS Dhoni - Part 16 hours agoAni 2:11Uttarakhand floods: PM announces Rs 1000 cr package - Part 16 hours agoAni 2:02Uttarakhand floods: PM announces Rs 1000 cr package - Part 26 hours agoAni 0:57Rhino horn worth Rs 60 lakhs seized6 hours agoIndia Newzstreet
தமிழ்"சென்செக்ஸ்' 148 புள்ளிகள் அதிகரிப்புஇந்திய பொருளாதாரம் 5.7 சதவீதமாக அதிகரிக்கும்: உலக வங்கிமாநில நெடுஞ்சாலைத்துறை வைத்தது "மாய' மரம்: 2,500 மரக்கன்று வளர்ப்பதாக தகவல்!More Tamil News»


text:
Gary Moore Caroline – The Importance Of Mentoring Others. – Gary Moore Caroline
Previous postGary Moore Caroline – Tips For Photographing Animals
Next postGary Moore: How Watching a Movie Can Improve Your Life