...
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#include <process.h>
8#include "_cgo_export.h"
9
10__stdcall
11static unsigned int
12addThread(void *p)
13{
14 int i, max;
15
16 max = *(int*)p;
17 for(i=0; i<max; i++)
18 Add(i);
19 return 0;
20}
21
22void
23doAdd(int max, int nthread)
24{
25 enum { MaxThread = 20 };
26 int i;
27 uintptr_t thread_id[MaxThread];
28
29 if(nthread > MaxThread)
30 nthread = MaxThread;
31 for(i=0; i<nthread; i++)
32 thread_id[i] = _beginthreadex(0, 0, addThread, &max, 0, 0);
33 for(i=0; i<nthread; i++) {
34 WaitForSingleObject((HANDLE)thread_id[i], INFINITE);
35 CloseHandle((HANDLE)thread_id[i]);
36 }
37}
38
39__stdcall
40static unsigned int
41goDummyCallbackThread(void* p)
42{
43 int i, max;
44
45 max = *(int*)p;
46 for(i=0; i<max; i++)
47 goDummy();
48 return 0;
49}
50
51int
52callGoInCThread(int max)
53{
54 uintptr_t thread_id;
55 thread_id = _beginthreadex(0, 0, goDummyCallbackThread, &max, 0, 0);
56 WaitForSingleObject((HANDLE)thread_id, INFINITE);
57 CloseHandle((HANDLE)thread_id);
58 return max;
59}
View as plain text