public static void NoticeInited() { ThreadObj threadObj = GetCurrentThreadObj(); threadObj.WaitInitForUser.Set(); threadObj.WaitInitForUserAsync.Set(); }
public static ThreadObj[] StartMany(int num, ThreadProc proc, object?param = null, bool isBackground = false) { List <ThreadObj> ret = new List <ThreadObj>(); for (int i = 0; i < num; i++) { ThreadObj t = new ThreadObj(proc, param, 0, i, isBackground: isBackground); ret.Add(t); } return(ret.ToArray()); }
public BatchQueueItem <T> Add(T item) { BatchQueueItem <T> q = new BatchQueueItem <T>(item); lock (LockObj) { this.ItemQueue.Enqueue(q); if (threadMode == 0) { threadMode = 1; ThreadObj t = new ThreadObj(BackgroundThreadProc); } } NewEventSignal.Set(); return(q); }
// スリープ public static void SleepThread(int millisec) { ThreadObj.Sleep(millisec); }
public static unsafe void Poll(IntPtr[] reads, IntPtr[] writes, int timeout) { if (timeout == 0) { return; } PollEvent[] p; int num, n, num_read_total, num_write_total; num_read_total = num_write_total = 0; foreach (IntPtr fd in reads) { if ((int)fd != -1) { num_read_total++; } } foreach (IntPtr fd in writes) { if ((int)fd != -1) { num_write_total++; } } num = num_read_total + num_write_total; p = new PollEvent[num]; n = 0; foreach (IntPtr fd in reads) { if ((int)fd != -1) { p[n].FileDescriptor = (int)fd; p[n].Events = PollEvents.POLLIN | PollEvents.POLLPRI | PollEvents.POLLERR | PollEvents.POLLHUP; n++; } } foreach (IntPtr fd in writes) { if ((int)fd != -1) { p[n].FileDescriptor = (int)fd; p[n].Events = PollEvents.POLLIN | PollEvents.POLLPRI | PollEvents.POLLERR | PollEvents.POLLHUP | PollEvents.POLLOUT; n++; } } if (num == 0) { ThreadObj.Sleep(timeout); } else { //Dbg.WriteLine("Poll Begin."); int ret = Poll(p, timeout); //Dbg.WriteLine($"Poll end: ret = {ret}, reads = {reads.Length}, writes = {writes.Length}, pfds = {p.Length}"); //for (int i = 0; i < reads.Length; i++) Dbg.WriteLine($"reads[{i}] = {reads[i]}"); //for (int i = 0; i < writes.Length; i++) Dbg.WriteLine($"writes[{i}] = {writes[i]}"); } }