Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading SC#U螺纹&x27;s wait()语句不阻止OS线程_Multithreading_Time_Wait_Systemc - Fatal编程技术网

Multithreading SC#U螺纹&x27;s wait()语句不阻止OS线程

Multithreading SC#U螺纹&x27;s wait()语句不阻止OS线程,multithreading,time,wait,systemc,Multithreading,Time,Wait,Systemc,我在较大的程序中同步线程时遇到一些问题,并注意到我的一些等待语句从未返回,因此我决定只编写一个简单的线程来测试等待的功能,并注意到它在SC_SEC级别被完全忽略。下面是我正在运行的示例: void Transmit::Tx(){ time_t t1, t2; while (1){ t1 = time(NULL); wait(10, SC_SEC); t2 = time(NULL); cout << t2

我在较大的程序中同步线程时遇到一些问题,并注意到我的一些等待语句从未返回,因此我决定只编写一个简单的线程来测试等待的功能,并注意到它在
SC_SEC
级别被完全忽略。下面是我正在运行的示例:

void Transmit::Tx(){
    time_t t1, t2;
    while (1){
        t1 = time(NULL);
        wait(10, SC_SEC);
        t2 = time(NULL);
        cout << t2 - t1 << endl;
    }
}
void传输::Tx(){
时间t1,t2;
而(1){
t1=时间(空);
等待(10秒);
t2=时间(空);

您是在尝试使用SystemC对硬件设计建模,还是尝试使用SystemC进行软件建模? 看来你把上下文弄混了

SystemC主要用于硬件设计建模(类似于VHDL和Verilog)

您在SystemC上下文中观察到的计时概念与真实世界的时间根本不相关


当然,当您在SystemC中切换线程时,您将始终观察到接近零的执行时间,因为它只是将执行上下文切换到其他线程,SystemC内核只是将虚拟时间(即模拟时间)与模型时间(虚拟时间)同步基于SystemC内核中的事件。

但不是等待的目的(双精度,sc\U时间单位)在指定的时间段内停止线程执行?这是我不理解的。我使用systemc进行高级系统建模。我没有任何硬件或软件规范,只是一个基本的系统功能。如果我有一个线程,那么也没有线程可切换。这是否意味着忽略wait语句?这是否也意味着在给定的时间内只能运行一个线程?如果提供,请等待仅在指定的虚拟时间内停止线程执行。此外,根据OSCI SystemC的实现,您已经有一个执行线程,即SystemC内核自身和所有SC_方法在SC_THR时在SystemC内核线程的上下文中运行EAD映射到用户空间线程或系统线程,具体取决于OSCI SystemC内核配置。既然我提供了时间单位和值,为什么我的线程在代码中不暂停10秒?请查看聊天中的评论: