public class Tasker :aTasker {
Entity get_leader { get {
var lui = ui as UI;
var l = lui.leader;
return (l == null || l.Owner == null || !l.Owner.IsValid || lui.b_leader_dead) ? null : lui.leader.Owner;
} }
protected override void MakeTask() {
var leader = get_leader;
int _id = 0;
public SlimTest() {
var main = new Thread(() => {
while(true) {
locker.EnterWriteLock();
try {
var cf = R.Next(1, 10) % 2;
if(cf > 0)
_leader = new Player() { id = _id += 1 };
}
finally {
locker.ExitWriteLock();
}
Thread.Sleep(R.Next(3, 10));
}
});
main.IsBackground = true;
main.Start();
for(int i = 0; i < 10;i++) {
var reader = new Thread(() => {
int my_id=0;
while(true) {
if(leader == null)
continue;
if(my_id != leader.id) {
my_id = leader.id;
Console.Write(leader.id);
}
else
Console.Write(".");
Thread.Sleep(R.Next(3, 10));
}
});
reader.IsBackground = true;
reader.Start();
}
}
using System;
using System.Collections.Concurrent;
using System.Threading;
class ThredSafe2 {
Random R = new Random();
ConcurrentQueue<Player> locker = new ConcurrentQueue<Player>();
Player _leader;
public Player leader {
get {
if(locker.Count > 0) {
locker.TryPeek(out _leader);
return _leader;
}
else
return null;
}
}
int _id = 0;
public ThredSafe2() {
var main = new Thread(() => {
while(true) {
var cf = R.Next(1, 10) % 2;
if(cf > 0)
locker.Enqueue(new Player() { id = _id += 1 });
else
---------- way1-------------------------------------------------
while(locker.Count >0)
locker.TryDequeue(out _); алгоритм ок, но вылетает как в way3
------------way2----------------------------------------------------
locker.TryDequeue(out _); // в целом работает стабьильно но не всегда удаляет - и locker накапливает мусор
-----------way3----------------------------------------------
locker.Clear(); // алгоритм ок, но вылетает как в way1
Thread.Sleep(R.Next(3, 10));
}
});
main.IsBackground = true;
main.Start();
for(int i = 0; i < 10; i++) {
var reader = new Thread(() => {
while(true) {
if(leader != null) {
Console.Write(leader.id); //System.NullReferenceException: 'Object reference not set to an instance of an object.'
}
else
Console.Write(".");
Thread.Sleep(R.Next(3, 10));
}
});
reader.IsBackground = true;
reader.Start();
}
}
}
Во-первых, не очень понятно, зачем вам вообще это.
Returns
ImmutableList<T>
у тебя есть возможность написать ответ самостоятельно и отметить его решением.
Вы уже отвечали на вопрос
Если хотите что-то добавить, то можете
отредактировать свой ответ.
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<OutputPath>$(SolutionDir)bin\</OutputPath>
<PlatformTarget>x64</PlatformTarget>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
template <> string read(HANDLE handle, addrtype address, int len) {
char buffer[len]; // ->> вот тут этот косяк
if (ReadProcessMemory(handle, (LPVOID)address, &address, sizeof(addrtype), 0))
if (ReadProcessMemory(handle, (LPVOID)address, buffer, len, 0)) {
buffer[len] = '\0';
return buffer;
}
return "";
}
<typename T> T*
и <> void*
и т.д) - на все случаи жизни, и все не работают под С++void make_array(int l) {
char buffer[l+1];
...
}
у меня ui тут всегда UI, но его нужно брать именно как as UIтак как в базовом aUI нет реализации Leader - короче это вообще не важно в данном случае.
Что-то я вообще не понимаю тот "синтаксический сахар" который вы предлагаете.
Выглядит интересно, но как только я убираю
if(ui is UI
то сказу вся строка становится не валидная.Вот про это
где почитать - это что такое?