NThread tabanlı accessor kullanımı
Çoğu kullanıcı IndirectNThreadHostAccessor sınıfını doğrudan kurmaz. createAccessor() varsayılan accessor zincirini kurar, başlatır ve kullanıma...
Çoğu kullanıcı IndirectNThreadHostAccessor sınıfını doğrudan kurmaz. createAccessor() varsayılan accessor zincirini kurar, başlatır ve kullanıma hazır halde döndürür. Varsayılan idType, processAllThreadIds'dır: verilen kimlik PID kabul edilir ve aday thread'ler eşzamanlı denenir; ilk başarıyla yönlendirilen thread kazanır.
import { createAccessor } from 'exoproc-accessors';
import { struct } from 'bun-xffi';
const memory = await createAccessor(processId, {
hostOptions: {
timeoutMs: 5_000,
pollIntervalMs: 2,
},
});
try {
const Player = struct({ id: 'i32', health: 'i32' });
const player = new Player(playerAddress, memory);
console.log(await player.health);
} finally {
await memory.deinit();
}Thread seçimi
NThread bir process değil, tek bir thread yönetir. Yarış modunda kazanan thread accessor'ın .nthread.threadId alanından gözlemlenebilir. Hedefin thread modeli biliniyorsa yarış yerine açık seçim yapılabilir:
const memory = await createAccessor(threadId, {
idType: 'thread',
hostOptions: { timeoutMs: 5_000 },
});idType: 'process', process'in ilk listelenen thread'ini seçer; bu bir uygunluk garantisi değildir. UI, loader veya uzun süre lock tutabilecek thread'leri bilinçli olarak seçmeyin. Yarış modu da her thread'in güvenli olduğu anlamına gelmez; yalnızca yönlendirme işlemini tamamlayan ilk adayı seçer.
Çağrı seçenekleri ve temizlik
timeoutMs dönüş bekleme süresini, pollIntervalMs async polling aralığını belirler. signal ile bekleyen çağrı iptal edilebilir. Senkron callSync() çağıran JavaScript thread'ini bloke eder ve bekleme boyunca CPU çekirdeğini meşgul eder; yalnızca neredeyse hemen dönen çağrılar için uygundur.
createAccessor() resolve olduğunda başlatma tamamlanmıştır. Doğrudan IndirectNThreadHostAccessor kuruyorsanız await memory.init() çağırmanız gerekir. Hangi yol kullanılmış olursa olsun, finally içinde deinit() edin. Hedef thread öldükten veya bir çağrı timeout olduktan sonra accessor'ı sağlıklı varsaymayın.