Skip to content

Instantly share code, notes, and snippets.

@aferust
Last active March 24, 2020 21:51
Show Gist options
  • Save aferust/655e2ff818fad2992cd69c3333a88c74 to your computer and use it in GitHub Desktop.
Save aferust/655e2ff818fad2992cd69c3333a88c74 to your computer and use it in GitHub Desktop.
import core.stdc.stdio;
import core.sys.windows.windows;
struct UserData {
int data;
}
extern (Windows) uint t1(void* data) {
auto tid = GetCurrentThreadId();
auto dt = *(cast(UserData*)data);
auto myint = dt.data;
foreach(i; 0..3){
printf("from thread %i: %i \n", tid, myint);
Sleep(1000);
}
return 0;
}
extern (Windows) uint t2(void* data) {
auto tid = GetCurrentThreadId();
auto dt = *(cast(UserData*)data);
auto myint = dt.data + 1;
foreach(i; 0..3){
printf("from thread %i: %i \n", tid, myint);
Sleep(1000);
}
return 0;
}
extern (Windows) uint t3(void* data) {
auto tid = GetCurrentThreadId();
auto dt = *(cast(UserData*)data);
auto myint = dt.data + 2;
foreach(i; 0..3){
printf("from thread %i: %i \n", tid, myint);
Sleep(1000);
}
return 0;
}
extern (C) int main() @nogc nothrow {
uint[3] tid;
HANDLE[3] Array_Of_Thread_Handles;
auto ud1 = UserData(5);
auto ud2 = UserData(5);
auto ud3 = UserData(5);
Array_Of_Thread_Handles[0] = CreateThread(null, 0, &t1, &ud1, 0, &tid[0]);
Array_Of_Thread_Handles[1] = CreateThread(null, 0, &t2, &ud2, 0, &tid[1]);
Array_Of_Thread_Handles[2] = CreateThread(null, 0, &t3, &ud3, 0, &tid[2]);
WaitForMultipleObjects( 3, Array_Of_Thread_Handles.ptr, true, INFINITE);
printf("gg".ptr);
CloseHandle(Array_Of_Thread_Handles[0]);
CloseHandle(Array_Of_Thread_Handles[1]);
CloseHandle(Array_Of_Thread_Handles[2]);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment