public IExecutorThread Create(IExecutor executor, RunData data, IThreadStarter starter) { IExecutorThread thread = new ExecutorThreadImpl(executor, data); starter.OnStarted(thread); return(thread); }
public FixedSizeThreadPool(FixedSizeThreadPoolOption option) { this.option = option; this.threadStarter = CreateThreadStarter(); for (int i = 0; i < option.Size; i++) { this.threadStarter.StartThread(ExecuteWorkers); } }
public void Create() { IExecutor executor = Stub <IExecutor>(); IThreadStarter starter = Stub <IThreadStarter>(); RunData data = new RunData(); starter.Expect((m) => m.OnStarted(Arg <IExecutorThread> .Is.NotNull)); IExecutorThread thread = VerifyTarget(() => target.Create(executor, data, starter)); Assert.AreEqual(data, thread.GetRunData()); Assert.AreEqual(executor, thread.GetExecutor()); Assert.IsNull(thread.GetTask()); }
public MemoryMappedCommunicator(IThreadStarter threadStarter, string mappingBaseName, bool isHost) { this.MappingBaseName = mappingBaseName; this.IsHost = isHost; MappingNameSend = MappingBaseName + ".HostSend"; MappingNameReceive = MappingBaseName + ".HostReceive"; if (!IsHost) { var temp = MappingNameSend; MappingNameSend = MappingNameReceive; MappingNameReceive = temp; } disposedValue = false; run = true; receiverThreadDone = false; long totalMappedMemory = MemoryCapacity * StreamBufferCount; sendFile = MemoryMappedFile.CreateOrOpen(MappingNameSend, totalMappedMemory, MemoryMappedFileAccess.ReadWrite); receiveFile = MemoryMappedFile.CreateOrOpen(MappingNameReceive, totalMappedMemory, MemoryMappedFileAccess.ReadWrite); sendStreams = new MemoryMappedViewStream[StreamBufferCount]; receiveStreams = new MemoryMappedViewStream[StreamBufferCount]; long memoryPerBuffer = MemoryCapacity; for (int i = 0; i < StreamBufferCount; i++) { sendStreams[i] = sendFile.CreateViewStream(i * memoryPerBuffer, memoryPerBuffer, MemoryMappedFileAccess.ReadWrite); receiveStreams[i] = receiveFile.CreateViewStream(i * memoryPerBuffer, memoryPerBuffer, MemoryMappedFileAccess.ReadWrite); } sendCurrentIndex = 0; receiveCurrentIndex = 0; TotalSendCount = 0; totalReceiveCount = 0; receiverLocalMemory = new MemoryStream(new byte[MemoryCapacity], 0, MemoryCapacity, true, true); sendSync = new Sync(MappingNameSend); receiveSync = new Sync(MappingNameReceive); receiverDelegates = new List <Action <MemoryStream> >(); Thread.ThreadStart startInfo = new Thread.ThreadStart(ReceiveThread, this); receiverThread = threadStarter.CreateThread(startInfo); }
public void AddThreadStarter(IThreadStarter threadStarter) { this.threadStarter = threadStarter; }
public LockQueued(IThreadStarter starter, ManualResetEvent terminateEvent = null) { events[0] = sendEvent = new AutoResetEvent(false); events[1] = terminateEvent ?? new ManualResetEvent(false); starter.Start(ThreadRun); }
public IExecutorThread Create(IExecutor executor, RunData data, IThreadStarter starter) { IExecutorThread thread = new ExecutorThreadImpl(executor, data); starter.OnStarted(thread); return thread; }