Tôi là người mới làm quen với API cửa sổ và gần đây tôi đã học được rằng tôi không nên sử dụng CreateThread và TerminateThread. Tôi chuyển sang _beginthreadex
, tuy nhiên tôi không chắc chắn làm thế nào tôi có nghĩa vụ phải use _endthreadex
?Tôi sử dụng _endthreadex - windows API
Ví dụ, đây là một chức năng cơ bản tôi đã được thử nghiệm với:
// MyThreadFunction - outputs "#.) I Work" and ends
unsigned int __stdcall MyThreadFunction(void * lpParam)
{
int i = (int)lpParam;
cout << i << ".) I work! " << endl;
_endthreadex(0);
return 0;
}
là vị trí của tôi về _endthreadex
có đúng không? Tôi có nó trước khi trở về 0, mà chỉ có vẻ kỳ lạ với tôi? Tôi đọc trong các trang msdn về _endthreadex
rằng nó được gọi tự động khi một chức năng kết thúc, nhưng bạn nên gọi nó là để dọn dẹp bộ nhớ tốt hơn, và đó là lý do tại sao tôi thử đặt nó vào. Nó có vẻ không đúng, xin lỗi nếu đây là một câu hỏi tồi. Tôi chỉ muốn đảm bảo rằng tôi đang làm mọi thứ đúng nhất với khả năng của mình
Không có gì sai khi sử dụng CreateThread. Trừ khi bạn vẫn đang sử dụng MSVC cổ đại. –
@DavidHeffernan CRT được liên kết tĩnh có vấn đề rò rỉ bộ nhớ nếu bạn không sử dụng _begin/_endthread. Có một tham chiếu cho sự thay đổi này? –