MCPcopy Create free account
hub / github.com/diasurgical/devilution / nthread_start

Function nthread_start

Source/nthread.cpp:113–166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

111}
112
113void nthread_start(BOOL set_turn_upper_bit)
114{
115 const char *err, *err2;
116 DWORD largestMsgSize;
117 _SNETCAPS caps;
118
119 last_tick = SDL_GetTicks();
120 sgbPacketCountdown = 1;
121 sgbSyncCountdown = 1;
122 sgbTicsOutOfSync = TRUE;
123 if (set_turn_upper_bit)
124 nthread_set_turn_upper_bit();
125 else
126 turn_upper_bit = 0;
127 caps.size = 36;
128 if (!SNetGetProviderCaps(&caps)) {
129 err = TraceLastError();
130 app_fatal("SNetGetProviderCaps:\n%s", err);
131 }
132 gdwTurnsInTransit = caps.defaultturnsintransit;
133 if (!caps.defaultturnsintransit)
134 gdwTurnsInTransit = 1;
135 if (caps.defaultturnssec <= 20 && caps.defaultturnssec)
136 sgbNetUpdateRate = 20 / caps.defaultturnssec;
137 else
138 sgbNetUpdateRate = 1;
139 largestMsgSize = 512;
140 if (caps.maxmessagesize < 0x200)
141 largestMsgSize = caps.maxmessagesize;
142 gdwDeltaBytesSec = caps.bytessec >> 2;
143 gdwLargestMsgSize = largestMsgSize;
144 gdwNormalMsgSize = caps.bytessec * sgbNetUpdateRate / 20;
145 gdwNormalMsgSize *= 3;
146 gdwNormalMsgSize >>= 2;
147 if (caps.maxplayers > MAX_PLRS)
148 caps.maxplayers = MAX_PLRS;
149 gdwNormalMsgSize /= caps.maxplayers;
150 while (gdwNormalMsgSize < 0x80) {
151 gdwNormalMsgSize *= 2;
152 sgbNetUpdateRate *= 2;
153 }
154 if (gdwNormalMsgSize > largestMsgSize)
155 gdwNormalMsgSize = largestMsgSize;
156 if (gbMaxPlayers > 1) {
157 sgbThreadIsRunning = FALSE;
158 sgMemCrit.Enter();
159 nthread_should_run = TRUE;
160 sghThread = CreateThread(nthread_handler, &glpNThreadId);
161 if (sghThread == NULL) {
162 err2 = TraceLastError();
163 app_fatal("nthread2:\n%s", err2);
164 }
165 }
166}
167
168unsigned int nthread_handler(void *)
169{

Callers 1

NetInitFunction · 0.85

Calls 5

SNetGetProviderCapsFunction · 0.85
app_fatalFunction · 0.85
CreateThreadFunction · 0.85
EnterMethod · 0.80

Tested by

no test coverage detected