Tôi là người mới bắt đầu sử dụng đa luồng (Windows). Tôi muốn tạo 2 luồng bằng hàm CreateThread trong vòng lặp for. Nhưng hai hàm luồng tôi muốn tạo khác nhau. Vì vậy, tôi đã tạo một mảng con trỏ hàm để lưu trữ hai hàm mà tôi muốn tạo. Tôi sẽ tạo chức năng thread địa chỉ lpStart Sử dụng giá trị mảng trong tham số. Nhưng tôi gặp lỗi khi tạo mảng con trỏ hàm. Tôi chỉ đăng những phần quan trọng của mã bên dưới. Vì vậy, vui lòng sửa lỗi của tôi và giúp tôi tạo một mảng các con trỏ hàm (các hàm của chúng sẽ được sinh ra dưới dạng các luồng). Cảm ơn trước.
DWORD WINAPI Threadproc1(LPVOID lparam)
{
print_func(GetCurrentThreadId(),(LPDWORD)lparam);
return 1;
}
DWORD WINAPI Threadproc2(LPVOID lparam)
{
print_func(GetCurrentThreadId(),(LPDWORD)lparam);
return 1;
}
int main()
{
XỬ LÝ hThread[MAX_THREADS] = {NULL};//MAX_THREADS=2
DWORD dwthreadid;
/* Mảng lparam */
DWORD dwArrayparam[PARAM_MAX] = {1,2};//PARAM_MAX=2
/* Mảng hàm ptrs */
typedef DWORD WINAPI (*t_Threadproc)(LPVOID);//ERROR ở dòng này
t_Threadproc Threadproc[MAX_THREADS] = {Threadproc1,Threadproc2};
for(int i=0; i
{
hThread[i] = CreateThread(NULL,//thuộc tính bảo mật
0,//kích thước ngăn xếp
Threadproc[i],//địa chỉ bắt đầu luồng
(dwArrayparam+i),
0,
&dwthreadid
);
}
}
Lỗi biên dịch: Lỗi tôi gặp là Lỗi C2059: Lỗi cú pháp: '(' Nếu tôi xóa quy ước gọi WINAPI, tôi gặp lỗi ở dòng tiếp theo Lỗi C2440: 'Đang khởi tạo': không thể chuyển đổi từ 'DWORD (__stdcall *)( LPVOID)' cho "t_Threadproc"
Tôi nghĩ dòng này sẽ trông như thế này:
typedef DWORD (WINAPI *t_Threadproc)(LPVOID);
tức là từ khóa WINAPI
Cần phải đặt trong ngoặc đơn.
Tôi là một lập trình viên xuất sắc, rất giỏi!