Steam 설치
로그인
|
언어
简体中文(중국어 간체)
繁體中文(중국어 번체)
日本語(일본어)
ไทย(태국어)
Български(불가리아어)
Čeština(체코어)
Dansk(덴마크어)
Deutsch(독일어)
English(영어)
Español - España(스페인어 - 스페인)
Español - Latinoamérica(스페인어 - 중남미)
Ελληνικά(그리스어)
Français(프랑스어)
Italiano(이탈리아어)
Bahasa Indonesia(인도네시아어)
Magyar(헝가리어)
Nederlands(네덜란드어)
Norsk(노르웨이어)
Polski(폴란드어)
Português(포르투갈어 - 포르투갈)
Português - Brasil(포르투갈어 - 브라질)
Română(루마니아어)
Русский(러시아어)
Suomi(핀란드어)
Svenska(스웨덴어)
Türkçe(튀르키예어)
Tiếng Việt(베트남어)
Українська(우크라이나어)
번역 관련 문제 보고
1) it uses DirectDraw, and Windows 8 and Windows 10 have buggy DirectDraw, some people "fixed" it by using Wine or other DirectDraw re-implementations.
2) The game was designed to be multi-threaded, but it wasn't design to withstand all the broken and stupid decisions hardware and OS makers had regarding timing, as the OS shift the game around in the cores, the timing functions report erroneous values and confuse the game and make it crash.
You can use multiple cores, I for example play SC4 with all 8 cores enabled, but you MUST use the option to do that, if you leave on automatic, windows keep shifting the game around the cores, crashing it, if you tell the game to choose 8 cores, it will lock itself down with each thread on a different core, and stop crashing.
Unfortunately, HyperThreading makes this a problem (I have a 4core processor with HyperThreading, the game runs better when using 4 cores for me, but when I tell it to use 4 cores sometimes it decides to use 4 logical cores next to each other, this result in it using only 2 real cores, and leaving 2 real cores unused).
The game was designed to be multi-threaded, however, they have not implemented thread-safe code. That is why it crashes on multi-core/proc. It increases the likehood of the faults being reached.
You can try setting CORE AFFINITY on the exe in the process manager. Saves messing with any files or disabling things.
The game use both Critical Sections from MS, Mutexes, and the ocasional semaphore, also it has a custom implementation of Atomic Operations (like the ones in the newest C standard).
Every time the game must allocate, decallocate, or do I/O, it uses a Critical Section.
Also for extra safety, on top of Critical Sections, the game has recursive lock count, and some debug guards, the game dumps a exception report if somehow a Critical Section is violated.
If it was thread-safe then it wouldn't crash with concurrency. Plain and simple.
Timing is also part of concurrency management, synchronisation. They failed at it.
They didn't failed at it, when the game was launched...
Problem with RDTSC: Multi-Core processors can get RDTSC grossly out of sync, this may result in your physics crashing due to divide by zero when it try to calculate something that is time dependent, and end with time different being zero (ie: you did physics update on one core, then the next time you update physics, the core changed, but the difference between them was the same as the time that passed, thus RDTSCNew - RDTSCOld = 0, then you do some formula like acceleration = velocitychange/deltatime and end with a divide by zero).
Problem with QPC: Microsoft and Intel tried to fix the RDTSC problem by developing new time counting chips and whatnot, and a new API that tried to return only synced results between all cores and CPUs, but it never worked properly, and QPC has a ambiguous fallback system, when QPC detects something is out of sync, it can change its timing source without warning, this mean that if you compare QPC results between frames, you might get grossly different results, having nothing to do with each other, since they used different clock sources.
Also QPC is allowed to use RDTSC internally anyway, returning to the first problem.
Also, SC4 was made when RDTSC returned clock count only, at every processor clock, it summed 1 in a counter, and returned that on RDTSC, after Intel discovered people were using RDTSC for timing, they developed a new RDTSC that instead tried to count time.
SC4 ASM code, when launching the game, runs several loops of some algorithm, and do RDTSC before and after, and also use a normal time tracking funciton, then it divides the RDTSC/Time to figure the processor clock.
But currently, RDTSC does NOT reflect the processor clock, thus RDTSC/time returns a bogus result that makes little sense, but SC4 team could not know of that, since the new RDTSC system was invented after the game was released. (and is also why Microsoft begs people to use QPC, not RDTSC directly).