Borland C++ 5.02 中使用第 3 方头文件的多线程

Multi threading with 3rd party headerfiles in Borland C++ 5.02

有没有我可以用来在 Borland 5.02 上创建多线程的头文件或扩展?

我想制作一个程序,让两条直线以不同的速度移动,无限循环。 像这样

#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include<dos.h>


void linesmov(int seconds);

main()
{
// Thread 1
linesmov(5);

//Thread 2
linesmov(30);
}

void linesmov(int mseconds){

    int i=0;
while (true){
    i=i+1;
    clrscr();   // Or system("cls"); If you may...
    gotoxy(i,15);   cout << "____||____||____";
    Sleep(mseconds);
    if (i>115){     i=0;  }
}

}

是的..我知道人们会说,买一个新的编译器, 我的学校使用旧编译器作为评分"standard",所以请耐心等待。

您的代码正在使用 windows.h,这意味着您可以访问 Win32 API。所以看看 Win32 CreateThread() 函数。

所以我终于找到了一种方法。

#include <Windows.h>
#include <stdio.h>
#include<dos.h>
#include<iostream.h>
#include<conio.h>

void linesmov(int mseconds,int y);


void linesmov(int mseconds,int y){

    int i=0;
while (true){
    i=i+1;
     // Or system("cls"); If you may...
    gotoxy(i,y);   cout << "____||____||____"; gotoxy(i-1,y);cout << " ";
    Sleep(mseconds);
    if (i>115){     i=0;  for(int o=0;o<100;o++){gotoxy(0,y);   cout << "                  ";}}
}
}

DWORD WINAPI mythread1(LPVOID lpParameter)
{
    printf("Thread inside %d \n", GetCurrentThreadId());
    linesmov(5,10);
    return 0;
}
DWORD WINAPI mythread2(LPVOID lpParameter)
{
    printf("Thread inside %d \n", GetCurrentThreadId());
    linesmov(30,15);
    return 0;
}

int main(int argc, char* argv[])
{
    HANDLE myhandle1;
    DWORD mythreadid1;
    HANDLE myhandle2;
    DWORD mythreadid2;
    myhandle1 = CreateThread(0,0,mythread1,0,0,&mythreadid1);
    myhandle2 = CreateThread(0,0,mythread2,0,0,&mythreadid2);
    printf("Thread after %d \n", mythreadid1);

    getchar();
    return 0;
}

做得好!

Hans Boehm 写了一篇著名的论文来解释为什么这是个坏主意:Threads cannot be implemented as a library

简而言之,如果你想进行 multi-threaded 编程,你需要一种语言和一个编译器来为 thread-safety 提供一定的保证。如果你没有这个,你最终会 运行 陷入非常奇怪和难以理解的错误。

顺便说一句,这是 C++11 引入的线程支持如此重要的主要原因之一:仅使用库是不够的,您实际上还需要语言的适当支持。

由于 Borland C++ 不提供这些保证,因此在使用它进行 multi-threaded 编程时不要指望它能带你走得很远。